所以我创建了这个列表:
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
的话有第一个元素的打印方法...
希望我能向您说明清楚,不要犹豫,问一下您是否不理解。
谢谢。
答案 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
这可以确保在给定类型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)