【问题标题】:python without comma after variables lead to TypeError: 'int' object is not iterable [duplicate]变量导致TypeError后没有逗号的python:'int'对象不可迭代[重复]
【发布时间】:2018-06-28 13:59:57
【问题描述】:
people = [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
p = people[0]
a = []
a+=p[0]

TypeError       Traceback (most recent call last)
<ipython-input-57-244e88383d16> in <module>()
      2 a = []
      3 type(p[0])
----> 4 a+=p[0]
      5 print(a)

TypeError: 'int' object is not iterable

当我在a+=p[0] 之后添加逗号以将其更改为a+=p[0],。有用。为什么?这个逗号在这行代码中有什么作用?

【问题讨论】:

  • 您可以将列表中的+= 视为list.extend() 的语法糖,它以可迭代对象为参数。在p[0] 之后放置一个逗号会将p[0] 处的整数转换为包含该整数的单个项目元组。由于元组是可迭代的,+= 现在可以工作了。

标签: python


【解决方案1】:

逗号创建一个元组。

1 # int
1, # a tuple, equivalent of (1,)

由于您只能向列表添加可迭代对象,因此您可以添加元组但不能添加整数。

【讨论】:

  • type(7,) == int 使用 python 2.7
  • 哦,我明白了,谢谢!
  • @ᴀʀᴍᴀɴ,是的,在这种情况下,逗号分隔函数的参数。
【解决方案2】:

因为p[0] 等于 7,因此不能与另一个列表连接。我不知道你想在这里完成什么,我可以建议的唯一改变是

a += [p[0]] # or a.append(p[0]) if you don't mind mutating the original object

就添加逗号而言,它可以工作,因为它隐式地创建了一个元组,正如@ForceBru 建议的那样。

【讨论】:

  • 这个措辞有点误导。 append() 可以正常工作。
  • @DanielRoseman 改变了它。谢谢。
  • 您为什么没有回答为什么a += p[0], 有效。
  • @ARMAN 第一次在问题中没有看到该声明。
【解决方案3】:

a 是一个list 并且+= 运算符期望一个iterable 附加到list

>>> a = []
>>> a += [1, 2, 3]
>>> a += 1, 2, 3
>>> a += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

之所以有效,是因为将, 添加到一个数字会生成一个tuple,请参阅:

>>> b = 1,
>>> type(b)
<class 'tuple'>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 2013-10-31
    • 2018-10-27
    • 2016-02-24
    • 1970-01-01
    • 2018-09-22
    • 2017-09-11
    相关资源
    最近更新 更多