создать список из списка списка кортежей - PullRequest
0 голосов
/ 10 октября 2018

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

listA = [ [(1,2,A), (1,3,B)], [(1,1,B),(1,2,D)], [(1,1,C),(1,3,F], [(1,3,D),(1,5,F)] ]

, и я хочу создать новый список, состоящий из списка списка элемента [2] (букв) из исходного списка.

, поэтому мой новый список будет выглядеть так:

newList = [ [A,B] , [B,D], [C,F], [D,F] ]

Надеюсь, это понятно.

Ответы [ 4 ]

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

Вы можете использовать сжатое выражение с list или с использованием понимания списка

print(list([j[-1] for j in i] for i in lista))
print([[j[-1] for j in i] for i in lista])

Расширенное объяснение:

new = []
for i in lista:
    x = []
    for j in i:
        x.append(j[-1])
    new.append(x)
0 голосов
/ 10 октября 2018

Вы можете использовать следующее вложенное понимание:

[[y[2] for y in x] for x in listA]
# [['A', 'B'], ['B', 'D'], ['C', 'F'], ['D', 'F']]

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

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

Если разрешено numpy, вы можете сделать что-то вроде этого:

import numpy as np

listA = [[(1, 2, 'A'), (1, 3, 'B')], [(1, 1, 'B'), (1, 2, 'D')], [(1, 1, 'C'), (1, 3, 'F')], [(1, 3, 'D'), (1, 5, 'F')]]
print(np.array(listA)[:, :, 2].tolist())

Вывод

[['A', 'B'], ['B', 'D'], ['C', 'F'], ['D', 'F']]

В качестве альтернативы вы также можете сделать:

print(np.array(listA)[..., 2].tolist())
0 голосов
/ 10 октября 2018

Я преобразовал переменные A, B, C, D в строки для предоставления примера вывода.Вы можете использовать понимание единого списка тогда следующим образом.

Объяснение : Вы перебираете отдельные списки, используя i.У каждого подсписка есть два кортежа, из которых вы хотите последние элементы.i[0][-1] дает вам последний элемент из первого кортежа и i[0][-1] дает вам последний элемент из второго кортежа,

listA = [ [(1,2,'A'), (1,3,'B')], [(1,1,'B'),(1,2,'D')], [(1,1,'C'),(1,3,'F')], [(1,3,'D'),(1,5,'F')] ]
listB = [[i[0][-1], i[1][-1]] for i in listA]

выводит

[['A', 'B'], ['B', 'D'], ['C', 'F'], ['D', 'F']]
...