为什么&39;int";在Python中不可迭代,而';str&39;却可以迭代?
问题描述
我正在练习列表理解,遇到以下错误:
查找1-1000中包含3的所有数字
result = [i for i in range(1, 1001) if 3 in i]
print(result)
结果=[范围(1,1000)中的i,如果i中的3]
TypeError:‘int’类型的参数不可迭代
但如果我编写以下代码,它可以完美地工作:
result = [i for i in range(1, 1001) if "3" in str(i)]
print(result)
.所以很明显字符串是可迭代的。但是整数不是。为什么?
解决方案
,因为不清楚在int
上迭代会做什么。您似乎希望它遍历小数位(?)但是,例如,我发现这是不合理的:我会发现迭代它的位(即它的二进制数字)要自然得多。在内存中,int
表示为二进制数,而不是十进制数,因此我可以争辩说,我的是更自然的预期。
但由于没有明显的正确答案,Python的设计者决定根本不使int
可迭代。
相反,对于字符串,有一个直观的"正确"答案(尽管魔鬼在于细节):我们迭代它的字符。不幸的是,这实际上打开了一个蠕虫罐头,因为整本书都是关于"性格"的定义的,而且在实践中会发生一些微妙的不同的事情(如果您很好奇,可以开始阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!))。但是答案"我们遍历字符"已经足够接近了。
相关文章