为什么for循环中的迭代器是字符串而不是整数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么for循环中的迭代器是字符串而不是整数?相关的知识,希望对你有一定的参考价值。

这是我编写的代码:

a = "5,3,1"
print (type(a))
b = []
b = a.split(",")
print (type(b))
print (b)
for i in b:
    if (int(i) % 5 == 0):
        print (i) 

print (type(i))

在for循环中,我期望变量i是整数类型。但事实证明,这是一个字符串。这有什么意义?

输出

<class 'str'>                                                                                                                                                                      
<class 'list'>                                                                                                                                                                     
['5', '3', '1']                                                                                                                                                                    
5                                                                                                                                                                                  
<class 'str'> 

我们如何使用字符串作为迭代器来遍历列表中的列表项?此外,如果我删除了int行中的if (int(i) % 5 == 0):,则会出现此错误:TypeError: not all arguments converted during string formatting我无法理解其工作原理

答案

b是字符串列表,对吗?这是b

['5', '3', '1']

因此,当您开始遍历b时,i的每个值都将是一个字符串,因为b中包含字符串。当您在int(i)语句中说if时,您正在[[not将i更改为整数。您将获得i的整数值。

如果要b是整数列表,请改用此列表:

b = [int(num) for num in a.split(",")]

输出:

<class 'str'> <class 'list'> [5, 3, 1] 5 <class 'int'>

您可以看到i现在是整数。
另一答案
将字符串分割为

b时,将获得字符串列表["5", "3", "1"]。遍历b时,循环变量i被分配给列表中的每个值,并且每个值都是一个字符串。您可以使用int(i)i中的值转换为整数,但是除非手动转换该值,否则它仍然是字符串。这就是为什么不能使用if i % 5的原因,因为string % int在Python中未定义。

以上是关于为什么for循环中的迭代器是字符串而不是整数?的主要内容,如果未能解决你的问题,请参考以下文章

迭代器

迭代器

迭代器

For 循环的迭代次数少于我在 Python 中的预期

构成可迭代对象的要素

ES6 - 基础学习(13): Iterator(迭代器) 和 for...of 循环