Why is a tuple of tuples of length 1 not actually a tuple unless I add a comma?

前端 未结 3 1603
故里飘歌
故里飘歌 2021-01-22 23:14

Given a tuple of tuples T:

((\'a\', \'b\'))

and an individual tuple t1:

(\'a\',\'b\')
         


        
相关标签:
3条回答
  • 2021-01-22 23:30

    Check again. You likely have a bug somewhere else in your code. This check does work.

    As for the update, you're not creating a nested tuple.

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

    If you need a one-element tuple, you need a trailing coma:

    (('a', 'b'),)
    
    0 讨论(0)
  • 2021-01-22 23:35

    The problem is because T is not a tuple of tuples, it is just a tuple. The comma makes a tuple, not the parentheses. Should be:

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

    In fact, you can loose the outer parentheses:

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

    Although sometimes they are needed for precedence, if in doubt put them in. But remember, it is the comma that makes it a tuple.

    0 讨论(0)
  • 2021-01-22 23:49

    Doing this (('a', 'b')) does not make a tuple containing a tuple as you can see here:

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

    To make a single element tuple you need to add a trialing comma:

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

    In fact the parenthesis aren't even a requirement as this will also create a tuple:

    >>> t1 = 'a','b'
    >>> t1
    ('a', 'b')
    >>> 1,2,3,4,5,6
    (1, 2, 3, 4, 5, 6)
    
    0 讨论(0)
提交回复
热议问题