在Python中包含元组和int的列表中进行迭代

时间:2018-12-02 23:16:39

标签: python list loops tuples

所以我创建了这个列表:

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 :(得分:5)

使用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]

答案 1 :(得分:3)

要支持其他数据类型(浮点数而不是整数,列表而不是元组):

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

请注意,如果您要打印字符串的所有字符,此功能将无效。

答案 2 :(得分:2)

好吧,如果您想确保安全并打印可迭代项的第一项,则可以应用下标,hasattr检查Python对象是否具有某种方法,其中__getitem__等于slice函数:

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

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

>> 1
4
6

这可以确保在给定类型listtuples的情况下,您始终可以从序列中选择一个索引。请注意,str类型也是可迭代的序列。如果要排除它们,则可以使用isinstance来检查对象的类型,在此示例中,我们正在检查not stris Iterable

import collections

for i in l:
    if not isinstance(i, str) and isinstance(i, collections.Iterable):
        print(i[0])
    else:
        print(i)