Итерация в списке, который содержит кортежи и int в Python - PullRequest
0 голосов
/ 03 декабря 2018

Итак, я создал этот список:

l = [(1,2,3),(4,5),6]

Но когда я сделаю это:

for i in l:
    print (i[0])

Пришло сообщение об ошибке:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: object of type 'int' has no len()

Поэтому я хочу знать, есть ли у вас метод для печати числа, если это int или первый элемент, если это tuple ...

Надеюсь, я дал вам понять,не стесняйтесь спрашивать, если вы не понимаете.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Для поддержки других типов данных (плавающие вместо целых, списки вместо кортежей):

for i in l:
    try:
        print(i[0])
    except TypeError:
        print(i)

Обратите внимание, что это не будет работать, если вы хотите напечатать все символы строки.

0 голосов
/ 03 декабря 2018

Что ж, если вы хотите быть в безопасности и печатать первый элемент итерируемого, вы можете применять индексы, hasattr проверяет, есть ли у объекта Python определенный метод, где __getitem__ является эквивалентом функции слайса:

l = [(1,2,3),[4,5],6]

for i in l:
    if hasattr(i, '__getitem__'):
        print(i[0])
    else:
        print(i)

>> 1
4
6

Это гарантирует, что вы всегда можете выбрать индекс из последовательности, учитывая типы list или tuples.Обратите внимание, что тип str также является последовательностью, которая является итеративной.Если вы хотите исключить их, вы можете использовать isinstance для проверки типа объекта, в этом примере мы проверяем not str и is Iterable:

import collections

for i in l:
    if not isinstance(i, str) and isinstance(i, collections.Iterable):
        print(i[0])
    else:
        print(i)
0 голосов
/ 03 декабря 2018

Использование isinstance:

l = [(1,2,3),(4,5),6]
for i in l:
    if isinstance(i,int):
        print(i)
    elif isinstance(i,tuple):
        print(i[0])
# 1
# 4
# 6

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

[i if isinstance(i,int) else i[0] for i in l]
# [1, 4, 6]
...