Могу ли я использовать понимание списка для создания списка списков? - PullRequest
0 голосов
/ 06 марта 2020

С учетом этого значения:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

существует ли способ использования списка для получения этого значения:

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]?

Я бы предпочел сделать это без использования zip, если это возможно.

Спасибо!

Редактировать: Моя причина, по которой я не хотел использовать zip, заключалась в том, что я использовал zip, чтобы сделать что-то подобное раньше (хотя это и не список списков), и было рекомендовано вместо этого попробовать понимание списка, что сделало его немного аккуратнее. Я подумал, что тот же принцип может применяться и здесь, но, возможно, нет, поскольку это список списков, а не просто один список, как предыдущая проблема.

Кроме того, мои попытки сделать это до публикации этого вопроса даже не были стоит поделиться. Это было в основном понимание списка, которое создавало один список, и я не мог понять, как создать список списков с ним. Может быть, это не так просто, как я надеялся. Я мог бы go с почтовым индексом в конце концов.

Ответы [ 4 ]

4 голосов
/ 06 марта 2020

Попробуйте:

list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Используя zip, вы можете брать значения из внутренних списков вместе, а * вы можете распаковать эти значения

[*zip(*list1)]

или

list(map(list,zip(*list1)))
3 голосов
/ 06 марта 2020

Без zip:

>>> [*map(lambda *a: [*a], *a)]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
0 голосов
/ 06 марта 2020

Как насчет этого?

original = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
result = []
for x in range(len(min(orig))):
    result.append([item[x] for item in orig])

Основываясь на моем тестировании, это работает так же, как метод @ Himanshu [*zip(*list1)] и list(map(list,zip(*list1)))

0 голосов
/ 06 марта 2020

без почтового индекса:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
output = [[a[0][i],a[1][i],1[2][i]] for i in range(0,len(a))]
...