2016-08-14 4 views
-4

У меня есть список с элементами:Повторяющиеся элементы в списке

a = ['Monica', 'Mark', 'Nick', 'Margaret'] 

, и я хотел бы получить следующий список имен:

['Monica', 'Monica', 'Mark', 'Mark', 'Nick', 'Nick', 'Margaret', 'Margaret'] 

Самое простое решение, которое я придумал это :

lnames = [] 

for i, j in zip(a,a): 
     lnames.append(i) 
     lnames.append(j) 

Я также попытался использовать список понимание:

lnames2 = [list(x) for x in zip(a,a)] 

, но в этом случае я получаю:

[['Monica', 'Monica'], ['Mark', 'Mark'], ['Nick', 'Nick'], ['Margaret', 'Margaret']] 

и не знаю, как получить список желаний от этой точки.

Я хотел бы спросить вас, каковы ваши решения для этой задачи.

+0

"Самое простое решение [вы] придумали" работает ... что такое проблема? –

+5

Я бы использовал '[x для x в a для _ в диапазоне (2)]', захватить каждый элемент и повторить дважды ... –

+2

Что это связано с Pandas? –

ответ

1

Попробуйте

def repeat(collection, count): 
    for x in collection: 
     for i in range(count): 
      yield x 

a = ['Monica', 'Mark', 'Nick', 'Margaret'] 

print [x for x in repeat(a, 2)] 

печатает

['Monica', 'Monica', 'Mark', 'Mark', 'Nick', 'Nick', 'Margaret', 'Margaret'] 
1

Вот рабочий пример:

import itertools 

a = ['Monica', 'Mark', 'Nick', 'Margaret'] 

num_repeats = 2 
lnames2 = list(itertools.chain(*[[x] * num_repeats for x in a])) 
print(lnames2) 
+0

минус один - кувалда, чтобы взломать грецкий орех. – Merlin

+1

@Merlin Простейшее решение для частного случая n = 2 уже было представлено ОП в его первоначальном вопросе. Это просто общее решение, использующее стандартную библиотеку python, основные требования OP были просто «каковы ваши решения для этой задачи», поэтому я не уверен, почему вы сказали бы, что это минус один – BPL

+0

. @ BPL. Вы бы использовали это ? – Merlin

Смежные вопросы