Команда для разбиения списка списков на список первого элемента каждого списка - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь создать 2 списка из списка списков, следующий код является простым рабочим примером, но имеет смысл подумать, что есть команда, которую можно использовать вместо создания цикла for для разбиения.

def add_five(x):
    return x,x + 5
result1=[]
result2=[]
nums = [11, 22, 33, 44, 55]
result = list(map(add_five, nums))
print(result)
for n in range(len(result)):
    result1.append(result[n][0])
    result2.append(result[n][1])
print(result1,result2)

Список списков:

[(11, 16), (22, 27), (33, 38), (44, 49), (55, 60)]
result1=[11, 22, 33, 44, 55] 
result2=[16, 27, 38, 49, 60]

Есть ли команда, которая может помочь aviod с использованием цикла for?

1 Ответ

0 голосов
/ 18 октября 2018

Вы можете использовать списочные выражения для извлечения n -го элемента каждого tuple:

L = [(11, 16), (22, 27), (33, 38), (44, 49), (55, 60)]

result1 = [i[0] for i in L]
result2 = [i[1] for i in L]

Функционально вы можете использовать operator.itemgetter дляэквивалент:

from operator import itemgetter

result1 = list(map(itemgetter(0), L))
result2 = list(map(itemgetter(1), L))

Если вы не заранее знаете размер ваших кортежей, рекомендуемое решение - zip, которое выведет список кортежей, каждый кортежпредставляющий индекс кортежа:

results = list(zip(*L))

[(11, 22, 33, 44, 55), (16, 27, 38, 49, 60)]

Вы можете даже использовать распаковку последовательности здесь без формирования полного списка:

result1, result2 = zip(*L)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...