【问题标题】:How to create a tuple of an empty tuple in Python?如何在 Python 中创建一个空元组的元组?
【发布时间】:2016-06-18 09:45:22
【问题描述】:

如何创建一个只包含一个空元组的元组,即(())?我试过tuple(tuple())tuple(tuple(tuple()))tuple([])tuple(tuple([])),它们都给了我()

我使用这样的东西的原因如下:假设你有n 的包和m 的物品。为了表示包中的项目列表,我使用长度为ntuple,其中该元组的每个元素都代表一个包。一个袋子可能是空的,标记为()。现在,在最初的某个时间点,我只有一个装有空物品的袋子!

【问题讨论】:

  • 空元组文字是(),而不是(,)
  • @DeepSpace 没错。然后使用这个元组创建一个新元组,并将所有元组存储在某个地方以进行日志记录。
  • 一个包含 5 个元组的元组是 ((),)*5
  • @jeffery_the_wind 这并没有创建我想要的,但感谢您提供lists。它在以下工作代码tuple([tuple()]) 中帮助了我。此外,以下答案只是基于元组的,非常可取。
  • 除了逗号混淆之外,这里的关键见解是tuple() 构造函数是一个转换器,而不是容器。也就是说,你必须给它某种容器(技术上是一个迭代器)。这就是为什么tuple(1) 是一个类型错误。所以虽然tuple() 确实是一个空元组,tuple(tuple()) 只是转换为另一个空元组。

标签: python tuples


【解决方案1】:

空元组是()(或更冗长且速度较慢的tuple())和只有一项的元组(例如整数1),称为单例(参见here和@ 987654322@) 是(1,)。因此,只包含空元组的元组是

((),)

以下是一些显示有效的结果:

>>> a=((),)
>>> type(a)
<type 'tuple'>
>>> len(a)
1
>>> a[0]
()
>>> type(a[0])
<type 'tuple'>
>>> len(a[0])
0

【讨论】:

  • 这是实际问题的正确答案,但请注意,这并没有说明如何创建简单的空元组。如果您只是寻找一个空元组,而不是“包含空元组的元组”,那么请小心!
  • @innov8:我的答案以“空元组是()”开头。它确实“展示了如何创建一个简单的空元组”。然后它还展示了如何“创建一个只包含一个空元组的元组”。
  • @rory_daulton 您的回答是对这个问题的完美回答。我的观点是,您可以在此页面上登陆另一个问题“如何创建空元组” - 这是不同的问题。当然,您没有专注于没有被问到的问题!
  • @innov8,但他确实回答了“如何创建一个空元组”。您使用 () - 表示空元组:docs.python.org/3.3/library/stdtypes.html?highlight=tuple
  • a=((),) 中不需要外括号。 a=(), 就足够了,因为它是逗号,而不是括号,可以生成非空元组。
【解决方案2】:

一个空元组:

my_tuple = ()

一个包含 1 个字符串的元组:

my_tuple = ('foo',)

一个有 2 个字符串的元组:

my_tuple = ('foo', 'bar')

具有 1 个空元组的元组:

my_tuple = ((),)

具有 2 个空元组的元组:

my_tuple = ((), ())

【讨论】:

  • 请注意,在其中包含逗号的示例中不需要外括号。
  • @RogerDahl - 的确如此,尽管我个人认为包含外括号更容易一目了然。
【解决方案3】:

在一般情况下,构成元组的是逗号,而不是括号。在空元组的情况下事情变得混乱,因为独立的逗号在语法上是不正确的。所以对于空元组的特殊情况,“元组是逗号”规则不适用,而是使用特殊情况()语法。

【讨论】:

    【解决方案4】:

    (()) 不起作用我并不感到惊讶,因为外括号被解释为 - 括号。所以(()) == (),就像(2) == 2。但是,这应该可行:

    ((),)
    

    【讨论】:

      【解决方案5】:

      在 Python 2 中,tuple() 是唯一真正的空元组,但 ()((),) 创建一个长度为 1 的元组,其中包含一个长度为 0 的元组 - 但不是长度为零的元组本身。

      如果您想回答“我如何创建一个 empty(或零长度)元组......我通过搜索“如何创建一个空元组”找到了这篇文章,那么意识到这不是同一个问题,但可能会被误认为是那个问题(就像搜索一样),所以我虽然会提供答案:

      如何简单地创建一个空元组?

      原始问题可能会误导您,因为原始答案几乎可以作为一个空元组,但一次测试失败。

      (), 将创建一个“空”元组,正如之前的答案中所建议的那样,((),) 也可以工作,((( ((( (),))) ))) 实际上你可以使用任意数量的外括号,它们只是作为括号工作.但是,python 在打印元组时,确实会添加一组外括号。

      空括号是“无值”的非标准表示,添加尾随逗号会从“无值”生成一个元组。但它是一个带有“无值”条目的元组,而不是一个空元组。

      注意:这不是零长度元组,正如其他示例所示。外部元组是一个有一个值的元组,只是那个值有自己,是空元组。所以这会在另一个元组 inside 中创建一个空元组,而另一个元组 not 是空的。对于一个真正的空元组本身,使用tuple() 尽管() 的行为有些相似,但并不完全正确。

      >>>  a = (),
      >>> type(a)
      <class 'tuple'>
      >>> len(a)
      1
      >>> a
      ((),)
      >>> len(a[0])  # the inside tuple is empty, just not the outside one
      0
      

      类似地,对于长度为 1 但具有值的元组(在 b 的情况下为零,在 c 的示例中为“”)

      >>> b = 0,
      >>> type(b)
      <class 'tuple'>
      >>> len(b)
      1
      >>>b
      (0,)
      # now with an empty string
      >>> c = "",
      >>> type(c)
      <class 'tuple'>
      >>> len(c)
      1
      >>>c
      ('',)
      >>> len (c[0])  # same len of c[0] as with 'empty' tuple
      0
      

      因此,包含外括号是为了显示一个元组,但实际上不是元组的一部分,也不是创建元组所必需的。

      然而,所有这些方括号方法在外层都不是真正的空,这也是有用例的。

      >>> a = ((),)  # extra brackets just to show same as other answers
      >>> len(a)
      1
      >>> if a:
         print("not empty")
      not empty
      >>> e = tuple()
      >>> len(e)
      0
      >>> type(e)
      <class 'tuple'>
      >>> if e:
         print("not empty")
      
      >>> # note...did not print...so e acts as false as an empty tuple should
      

      所以如果你真的需要一个真正的空元组,使用tuple(),但是如果你需要的足够接近,你可以使用(),((),)

      【讨论】:

      • 这部分似乎只对python 2有效,在python 3中a = (); len(a)返回0
      • 是的,您必须使用 a=(),;len(a),因为没有尾随逗号,您将无法获得所需的结果。你得到一个元组,而不是元组中的元组
      • 为什么说“tuple()是唯一真正的空元组”?只使用() 怎么样?
      • @Joe, () 确实适用于当前版本,尽管我确实觉得它在做什么并不清楚,不知道为什么我没有在 2018 年 10 月将其包含在内
      猜你喜欢
      • 2013-09-27
      • 2014-02-08
      • 2013-09-10
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多