Как мы уже знаем, если у нас есть список, который содержит равный по размеру кортеж, то мы можем выполнить итерацию, как показано ниже,

list1 =[(1,2),(3,4),(5,6)]
for (i,j) in list1:
    print(i,j)

Что делать, если у меня есть список кортежей, как показано ниже:

list1 =[(1,2,3),(4,5),(7,8,9),(10,11)] 

Вместо использования вложенного цикла for, есть ли другой способ перебора всех элементов?

4
general46 11 Апр 2019 в 11:12

2 ответа

Лучший ответ

Если вы уже знаете минимальный размер, вы можете распаковать минимум и остаток:

>>> list1 =[(1,2,3),(4,5),(7,8,9),(10,11)] 
>>> for i, j, *r in list1:
...     print(i, j, r)
... 
1 2 [3]
4 5 []
7 8 [9]
10 11 []
6
Nordle 11 Апр 2019 в 08:49

Вы можете распаковать кортеж и преобразовать его в список и использовать len() в list, чтобы получить его size, не зная его заранее:

list1 =[(1,2,3),(4,5),(7,8,9),(10,11)]

for elem in list1:
    print([*elem], "of size: {}".format(len([*elem])))

ВЫВОД :

[1, 2, 3] of size: 3
[4, 5] of size: 2
[7, 8, 9] of size: 3
[10, 11] of size: 2

ИЗМЕНИТЬ :

Если вы не хотите никакого преобразования списка:

print(', '.join(map(str, (elem))), "of size: {}".format(len(elem)))

ВЫВОД :

1, 2, 3 of size: 3
4, 5 of size: 2
7, 8, 9 of size: 3
10, 11 of size: 2
0
DirtyBit 11 Апр 2019 в 08:44