Более чистый способ разделения списка кортежей на несколько списков

#python #numpy

Вопрос:

Название говорит само за себя, есть ли для этого выражение в одну строку ?

Воспроизводимый пример:

 Data = [(21,1,2000), (30,0,1991), (27,0,1994)]

age = [el[0] for el in Data]
sex = [el[1] for el in Data]
birth = [el[2] for el in Data]

print(age, sex, birth)
 

Ответ №1:

Воспользуйся zip :

 age, sex, birth = zip(*Data)  # tuple

# OR

age, sex, birth = map(list, zip(*Data))  # list
 
 >>> age
[21, 30, 27]

>>> sex
[1, 0, 0]

>> birth
[2000, 1991, 1994]
 

Комментарии:

1. Есть ли способ случайно получить их в виде списков ? В любом случае, твоя линия была прекрасна

2. Да, вы можете: map(list, zip(*Data))

Ответ №2:

Небольшая модификация решения @Corralien, чтобы получить результат в list не в tuple , используйте map zip вместе , чтобы получить результат

 Data = [(21,1,2000), (30,0,1991), (27,0,1994)]
age, sex, birth = map(list, zip(*Data))
print(age, sex, birth, sep ='n')
 

выход

 [21, 30, 27] # age
[1, 0, 0] # sex
[2000, 1991, 1994] # birth
 

Ответ №3:

 # You can do this by combining zip() with map() :

Data = [(21,1,2000), (30,0,1991), (27,0,1994)]
result = list(map(list, zip(*Data)))
print(result) 
# [[21, 30, 27], [1, 0, 0], [2000, 1991, 1994]]