2012-03-06 2 views
1

, если у меня есть этот массив Python:добавления каждого элемента массива снова, сразу же после того, как сам

mac_tags = [ "global_rtgn", "global_mogn" ] 

И я хочу этот массив Python:

mac_tags = [ "global_rtgn", "global_rtgn", "global_mogn","global_mogn" ] 

Как я могу создать его программно?

+2

_Why_ вы хотите что? Просто измените все, что использует список, чтобы дублировать записи. – katrielalex

ответ

4
new_mac_tags = [] 
for tag in mac_tags: 
    new_mac_tags += [tag, tag] 

или

from itertools import chain, izip 
new_mac_tags = list(chain.from_iterable(izip(mac_tags, mac_tags))) 
-1
[i for i in sorted(mac_tags+mac_tags)] 
+0

Не будет работать даже для примера OP. – DzinX

-1

Пожалуйста, обратите внимание, что это более функциональный способ сделать это и не может быть чистым идиоматических код питона.

data = [[s, s] for s in [ "global_rtgn", "global_mogn" ]] 

data = sum (data, []) 

print data 
+0

(a) Это похоже на злоупотребление 'sum' (b), используя сумму, вы теряете возможность использовать zip/izip вместо написания собственного. – Marcin

+0

@ Марцин: Самая худшая проблема с этим подходом заключается в том, что это O (n^2). –

+0

@SvenMarnach: Как так? Конечно, один обход для молнии, плюс один обход для суммы. Или вы имеете в виду, что выделение памяти будет O (n^2)? Не удалось ли CPython оптимизировать это? – Marcin

1
>>> [a for a in mac_tags for x in range(2)] 
['global_rtgn', 'global_rtgn', 'global_mogn', 'global_mogn'] 
+0

Это не ужасно читаемо. – Daenyth

+0

Не собираюсь спорить здесь, это просто еще один способ сделать это. – DzinX

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