python - 为什么 'int"在 Python 中不可迭代,但 'str' 是?

标签 python string int list-comprehension

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

找出 1 到 1000 中所有包含 3 的数字

result = [i for i in range(1, 1001) if 3 in i]

print(result)

result = [i for i in range(1, 1000) if 3 in i]

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

关于python - 为什么 'int"在 Python 中不可迭代,但 'str' 是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62599810/

相关文章:

c 字符串指针

c - 如何按值而不是引用添加字符串

Python循环练习

python - 在 Ubuntu 上使用 Python 3.2 的 rsvg

python - Python 上的不规则字符串解析

c - scsi 错误代码和字符串转换

java - String int 变量说明

c# - 在 C# 中从十六进制到整数的错误转换

python - 如何查看 Dash 应用程序中的活跃用户数?

python将列表附加到元组