Зацикливание списка списков и использование итератора

Итак, у меня есть следующий список списков:

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

Я хотел бы перебрать iй элемент во внутренних списках. Я могу сделать это с помощью zip:

for x, y, z in zip(test[0], test[1], test[2]):
    print(x, y, z)

Который возвращает:

1 4 7
2 5 8
3 6 9

Есть ли более чистый, более питонский способ сделать это? Что-то вроде zip(test, axis=0)?

2 ответа

Решение

Вы можете использовать распаковку, чтобы передать список ваших входных данных zip в качестве переменных аргументов:

for xyz in zip(*test):
    print(*xyz)

(и вы можете сделать то же самое для координат x,y,z, чтобы передать print)

Если вы используете numpy.array Вы можете просто использовать transpose массива и перебирать строки

>>> import numpy as np
>>> test = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> t = np.array(test)
>>> t
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

Затем перебирать

for row in t.T:
    print(row)

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

В зависимости от того, что вы собираетесь делать, numpy скорее всего, будет более эффективным, чем списки в целом

Другие вопросы по тегам