Python: понимание списка для доступа к нескольким спискам - PullRequest
0 голосов
/ 30 сентября 2018
list1 = []
list.append([item1[i], item2[i], item3[i] for i in range(2)])

т.е. как заполнить list1 с помощью [[item1[0], item2[0], item3[0]],[item1[1], item2[1], item3[1]]] через понимание списка, где item1, item2 item3 - разные списки?Пример:

item1 = [1,2,3,4]
item2 = [1,4,9,16]
item3 = [1,8,27,64]

# I want list1 =
[[1,1,1],
[2,4,8],
[3,9,27],
[4,16,64]]
# through list comprehension AND APPEND STATEMENT

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

Добавьте еще один набор [] в ваш код:

list1 = []
list1.append([[item1[i], item2[i], item3[i]] for i in range(len(item1))])

Обратите внимание, что это предполагает, что item1, item2 и item3 имеют одинаковую длину

В качестве альтернативы, для точного соответствия ожидаемого результата используйте следующее:

list1 = [[item1[i], item2[i], item3[i]] for i in range(len(item1))]

Пример данных и вывода

item1 = [1, 2, 3]
item2 = ["A", "B", "C"]
item3 = [0.1, 0.2, 0.3]
list1 = [[item1[i], item2[i], item3[i]] for i in range(len(item1))]
print(list1)

>>> [[1, 'A', 0.1], [2, 'B', 0.2], [3, 'C', 0.3]]

При использовании .append() понимание списка становится следующим:

for i in range(len(item1)):
    list1.append([item1[i], item2[i], item3[i]])

Однако, если вы хотите использовать понимание списка и still добавьте новоесозданные списки на list1, используйте += вместо .append():

list1 += [[item1[i], item2[i], item3[i]] for i in range(len(item1))]

.append() добавляет данный элемент в конец списка.+= добавит каждый подсписок отдельно.

0 голосов
/ 30 сентября 2018

Если на Python 2 просто сделать zip без list:

zip(item1, item2, item3)

Демо:

item1 = [1, 2, 3]
item2 = [4,5,6]
item3 = [7,8,9]
print(zip(item1, item2, item3))

Выход:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
0 голосов
/ 30 сентября 2018

Попробуйте:

list1 = list(zip(item1, item2, item3))

это будет работать до минимальной длины item1, item2, item3.Если вы хотите идти дольше, используйте itertools.zip_longest вместо zip.

пример с zip:

item1 = [0,1]
item3 = [2,3]
item2 = [4,5,6]
list1 = list(zip(item1, item2, item3))

[(0, 4, 2), (1, 5, 3)]

пример с itertools.zip_longest:

from itertools import zip_longest

item1 = [0,1]
item3 = [2,3]
item2 = [4,5,6]
list1 = list(zip_longest(item1, item2, item3))

[(0, 4, 2), (1, 5, 3), (None, 6, None)]
...