2013-08-07 2 views
1

Как я могу добиться повторения нескольких списков в наиболее питоническом режиме?Итерации элементов на нескольких списках python

Скажем, у меня есть 2 списка:

l1 = [1, 2, 3] 
l2 = [4, 5, 6] 

Как я могу достичь итерации по всему набору элементов l1 и l2 без изменения l1 и l2?

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

l3 = l1[:] 
l3.extend(l2) 
for e in l3: 
    # ... whatever with e 

Но это решение не звучит для меня как очень вещего, ни эффективного, поэтому я ищу лучший способ.

+1

Вы всегда можете просто перебирать 'l1', а затем итерации' l2', в отдельных циклах. Если в цикле слишком много кода, чтобы его можно было повторять, просто отвлечь его на функцию. Однако, говоря, что «цепочка» почти всегда является лучшим ответом, как предлагает Ф. Дж. Например, если вы хотите использовать genxpr или listcomp или функцию вместо явного цикла, вы не можете просто разбить его на два genexprs. (Ну, вы _can_ ... но только вызвав «цепочку» на результат, так что вы могли бы просто «цепочку» в начале ...) – abarnert

ответ

4

Вы можете непосредственно перебрать l1 + l2:

>>> l1 = [1, 2, 3] 
>>> l2 = [4, 5, 6] 
>>> 
>>> for e in l1 + l2: 
...  print e 
+0

ах, это верно! –

6

Вы можете использовать itertools.chain():

import itertools 
for e in itertools.chain(l1, l2): 
    print e 

Это не нужно, чтобы создать временный список для итерации, в отличие от l1 + l2. Он также будет работать для произвольных итераций и для последовательностей разных типов. Например:

>>> l1 = (1, 2, 3) 
>>> l2 = [4, 5, 6] 
>>> l1 + l2  # can't loop over l1 + l2... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: can only concatenate tuple (not "list") to tuple 
>>> import itertools 
>>> for e in itertools.chain(l1, l2): 
...  print e 
... 
1 
2 
3 
4 
5 
6 
+2

Почему downvote? –

+0

Это самый Pythonic подход, +1 – arshajii

+0

спасибо за ответ. Я думаю, что я должен перестать просить о питонических решениях. Я признаю, что ваш ответ - самый pythoniest, но тот, который я искал, - это другой из Rohit Jain. Hummm, как я уже сказал, я должен перестать просить питонику, но снова спасибо. (И это был не я, который был опущен и более того, я поддержал вас: D) –

1

Используйте оператор список конкатенации, + (т.е., l1 + l2) и итерацию по этому поводу.

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