为什么&39;int"在Python中不可迭代,而'str&39;却可以迭代?

2022-03-12 00:00:00 python string list-comprehension int

问题描述

我正在练习列表理解,遇到以下错误:

查找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!))。但是答案"我们遍历字符"已经足够接近了。

相关文章