【问题标题】:Why is the iterator in for loop a string and not an integer? [duplicate]为什么for循环中的迭代器是字符串而不是整数? [复制]
【发布时间】:2020-08-07 05:06:16
【问题描述】:

这是我写的代码:

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'> 

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

【问题讨论】:

  • 您为什么希望它是intb == a.split()str.split 总是返回一个字符串列表,所以当你迭代一个字符串列表时,这些项目当然是字符串...注意,i 不是迭代器 Python 术语。 i 只是一个变量,它被分配给迭代器中的下一个项目,该迭代器由您正在迭代的可迭代对象返回
  • 请原谅我知识贫乏。 For 循环通常有其他语言的迭代器......看起来它在 python 中有所不同
  • This answer in particular 详细介绍并解决可能来自其他语言的混淆
  • Python 确实使用基于迭代器的 for 循环。但是i 不是一个迭代器,它只是一个变量,在每次迭代时被分配来自迭代器的下一项。你想到了什么语言? 为什么您希望i 成为int?你期待什么整数?
  • @juanpa.arrivillaga 感谢您的参考。我现在很清楚

标签: python python-3.x


【解决方案1】:

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

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

因此,当您开始遍历b 时,i 的每个值都将是一个字符串,因为b 中的所有字符串都是字符串。 当您在 if 语句中说 int(i) 时,您没有i 更改为整数。您只得到i 的整数值。

如果您希望 b 成为整数列表而不是字符串列表,请改用:

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

输出:

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

您可以看到i 现在是一个整数。

【讨论】:

  • 我错过了列表b的元素仍然是字符串....谢谢指出
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 2014-07-27
    • 2019-04-17
    • 2020-12-24
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2019-09-08
    • 2021-02-19
    相关资源
    最近更新 更多