【问题标题】:Python list extend getting TypeError [duplicate]Python列表扩展获取TypeError [重复]
【发布时间】:2020-01-22 02:41:05
【问题描述】:

我使用 Python 已经有一段时间了(几周)。前几天我遇到了这个奇怪的错误,不知道为什么。有什么想法吗?

>>> t1 = [1, 2]
>>> t2 = (3, 4)
>>> t1.extend(t2)
>>> t1
[1, 2, 3, 4]
>>> t3 = (5)
>>> t1.extend(t3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

【问题讨论】:

  • 试试:t3 = (5,) 看看stackoverflow.com/questions/12876177/…
  • 谢谢,这个链接帮了很多忙。但我仍然想知道为什么(5) 应该被解释为5。为什么要这样设计?
  • 括号用于定义表达式中的运算符优先级,因此 Python 将表达式 (5) 评估为整数 5。为了将其与单个元素元组区分开来,Python 必须使用一些其他语法来避免歧义,它选择了尾随逗号,如下所示:(5,)。元组很棒,但在我看来,这既丑陋又令人遗憾。
  • 是的,这有点丑。尽管如此,现在我对它的理解要好得多。感谢您的帮助!
  • 有趣的是,以下也是有效的:t1 = 5,t2 = tuple([5])。后者至少让你的意图很明确。

标签: python list


【解决方案1】:

正如错误消息所说,t3 不是元组或列表,它只是一个整数。

为了用单个项目初始化一个元组,在后面添加一个逗号:

>>> type((5))
<type 'int'>
>>> type((5,))
<type 'tuple'>
>>>

【讨论】:

    【解决方案2】:
    TypeError: 'int' object is not iterable
    

    您正在键入以使用单个元素创建 tuple,但您已在 python 中创建了一个 int 对象。你得到的例外清楚地说明了这一点。

    请参阅this 链接。

    t3 = (5) # This creates an int object with value 5 in Python
    t3 = (5,) # Right way to create a tuple with single element.
    

    括号不会自动使它们成为元组。您必须在 int 之后添加一个逗号,以向 python 表明它应该是一个元组。

    来自Python docs

    一个特殊的问题是包含 0 或 1 项的元组的构造:语法有一些额外的怪癖来适应这些。空元组由一对空括号构成;一个包含一个项目的元组是通过一个带有逗号的值来构造的(将单个值括在括号中是不够的)。丑陋,但有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 2023-03-20
      • 1970-01-01
      • 2012-03-24
      • 2020-03-02
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      相关资源
      最近更新 更多