Я пытаюсь распечатать элементы в двух отдельных списках таким образом, чтобы элементы в list-1 совпадали с элементами в list-2.

Вот моя попытка:

import numpy as np
list_1=[1,2,3,4]
list_2=np.arange(0.1,0.4,0.1)

for x in list_1:
    j=x/2.0
    for y in list_2:
        print j,',', y

Мой результат:

0.5 , 0.1
0.5 , 0.2
0.5 , 0.3
0.5 , 0.4
1.0 , 0.1
1.0 , 0.2
1.0 , 0.3
1.0 , 0.4
1.5 , 0.1
1.5 , 0.2
1.5 , 0.3
1.5 , 0.4
2.0 , 0.1
2.0 , 0.2
2.0 , 0.3
2.0 , 0.4

Желаемый результат:

0.5 , 0.1
1.0 , 0.2
1.5 , 0.3
2.0 , 0.4
0
Tiger1 22 Дек 2013 в 17:58
Можете ли вы объяснить, чего вы хотите, немного лучше словами. Я почти уверен, что понимаю, что вы имеете в виду, но небольшое объяснение поможет. Я почти уверен, что вам нужен только один цикл
 – 
Tim Seguine
22 Дек 2013 в 18:00
Привет, Тим, спасибо за ответ. Моя цель - напечатать два списка таким образом, чтобы элемент 1 в списке_1 был выровнен с элементом 1 в списке_2. Желаемый результат в вопросе - это то, что я ищу.
 – 
Tiger1
22 Дек 2013 в 18:04
Хорошо, как я догадался. Ответ, который был опубликован, должен сделать это за вас.
 – 
Tim Seguine
22 Дек 2013 в 18:05
Диапазон не работает с плавающими числами, поэтому я использую numpy arange
 – 
Tiger1
22 Дек 2013 в 18:07
range - это не ответ, zip - это ответ, вы можете использовать zip с numpy.
 – 
Inbar Rose
22 Дек 2013 в 18:08

1 ответ

Лучший ответ

Вам нужно zip().

Пример:

>>> l1 = range(10)
>>> l2 = range(20,30)
>>> for x,y in zip(l1, l2):
    print x, y

0 20
1 21
2 22
3 23
4 24
5 25
6 26
7 27
8 28
9 29

Объяснение:

zip получает итерации, а затем выполняет итерацию по всем из них одновременно, начиная с элемента 0 каждого, затем переходя к 1-му, затем 2-му и так далее, как только любой из итераций достигает конца - zip остановится, вы можете использовать izip_longest из < a href = "http://docs.python.org/2/library/itertools.html#itertools" rel = "nofollow"> itertools , чтобы заполнить пустые элементы в итерациях с помощью None (или вы можете сделать что-то более интересное - но это уже другой вопрос)

3
Inbar Rose 22 Дек 2013 в 18:08
1
Спасибо @Inbar, на самом деле zip - это ответ. Мне просто было интересно, можно ли за один раз заархивировать до 5 элементов, и я уверен, что это возможно.
 – 
Tiger1
22 Дек 2013 в 18:13
Если вы считаете, что мой ответ вам помог, вы можете принять мой ответ.
 – 
Inbar Rose
22 Дек 2013 в 18:19
Пожалуйста, можете ли вы применить функцию zip в моем фактическом коде, чтобы получить желаемый результат? Спасибо.
 – 
Tiger1
22 Дек 2013 в 18:20
for x, y in zip(list_1, list_2): print '{}, {}'.format(x/2.0, y)
 – 
Inbar Rose
22 Дек 2013 в 18:21
Спасибо @Inbar, я просто хотел, чтобы вы поместили решение в реальный код, прежде чем принимать ответ.
 – 
Tiger1
22 Дек 2013 в 18:25