为什么长度为 1 的元组实际上不是元组,除非我添加逗号?

问题描述 投票:0回答:3

给定一个元组的元组T

(('a', 'b'))

和一个单独的元组 t1:

('a','b')

为什么:

t1 in T

返回False?

更新:来自 Ipython:

In [22]: T = (('a','b'))

In [23]: t1 = ('a','b')

In [24]: t1 in T
Out[24]: False

那么如何检查一个元组是否在另一个元组中?

python python-2.7 indexing tuples element
3个回答
13
投票

问题是因为 T 不是元组的元组,它只是一个元组。逗号构成元组,而不是括号。应该是:

>>> T = (('a','b'),)
>>> t1 = ('a', 'b')
>>> t1 in T
True

事实上,你可以去掉外面的括号:

>>> T = ('a','b'),
>>> t1 = 'a','b'
>>> type(T)
<type 'tuple'>
>>> type(T[0])
<type 'tuple'>
>>> type(t1)
<type 'tuple'>
>>> t1 in T
True

虽然有时需要它们来确定优先级,但如果有疑问,请将它们放入。但请记住,正是逗号使其成为元组。


3
投票

这样做

(('a', 'b'))
不会生成包含元组的元组,正如您在此处看到的:

    >>> T = (('a','b'))
    >>> T
    ('a', 'b')

要创建单个元素元组,您需要添加尾随逗号:

    >>> T = (('a','b'),)
    >>> t1 in T
    True
    >>> T
    (('a', 'b'),)

事实上,括号甚至不是必需的,因为这也会创建一个元组:

    >>> t1 = 'a','b'
    >>> t1
    ('a', 'b')
    >>> 1,2,3,4,5,6
    (1, 2, 3, 4, 5, 6)

2
投票

再次检查。您的代码中的其他地方可能存在错误。这项检查确实有效。

至于更新,您没有创建嵌套元组。

(('a', 'b')) == ('a', 'b')

如果您需要一个单元素元组,则需要尾随逗号:

(('a', 'b'),)
© www.soinside.com 2019 - 2024. All rights reserved.