【问题标题】:Why is 'a' in ('abc') True while 'a' in ['abc'] is False?为什么('abc')中的'a'为真,而['abc']中的'a'为假?
【发布时间】:2015-08-09 04:24:52
【问题描述】:

使用解释器时,表达式 'a' in ('abc') 返回 True,而 'a' in ['abc'] 返回 False。有人可以解释这种行为吗?

【问题讨论】:

  • ('abc') 不是元组,它只是字符串 'abc'。要实际检查包含字符串 'abc' 的元组中的成员资格,请使用 a in ('abc',)
  • 这是由于表达式优先级和元组的双重使用括号,这导致单元素元组的语法很奇怪
  • ('abc') 中的括号只是为了装饰,也是潜在的混淆来源。我花了一段时间才克服这个问题;我也认为括号表示一些特别的东西(参见方括号或花括号,它们确实意味着一些特别的东西)。在这种用法中,这些括号的意义为零。 xyz = (x, y, z)xyz = x, y, z 之间没有区别。逗号的存在具有特殊含义(空元组除外,其中() 确实具有特殊含义)。
  • 当然,您可以在解释器中输入'abc'('abc')['abc'],看看它们是什么。

标签: python


【解决方案1】:

('abc')'abc' 相同。 'abc' 包含子字符串'a',因此是'a' in 'abc' == True

如果你想要这个元组,你需要写('abc', )

['abc'] 是一个列表(包含单个元素,字符串'abc')。 'a' 不是这个列表的成员,所以'a' in ['abc'] == False

【讨论】:

    【解决方案2】:

    ('abc') 不是元组。我认为您将其与元组 ('abc',) 混淆了。

    实际上,('abc')'abc' 相同,array of characters 其中a 作为字符在其中,因此,第一次查找返回True

    >>> 'a' in 'abc'
    True
    

    另一方面,['abc'] 是字符串列表或字符列表(您可以将其视为字符的二维矩阵[['a', 'b', 'c']] 其中@ 987654331@,作为单个字符,不是外列表的成员。其实就是内表的第一个字符:

    >>> 'a' in ['abc']
    False
    
    >>> 'a' in ['abc'][0]
    True
    
    >>> 'a' == ['abc'][0][0]
    True
    

    【讨论】:

    • 你能告诉我和/或添加关于这个'a' == ['abc'][0][0]含义的参考
    • 'a' == ['abc'][0][0] "a" 在 (list first elem > first char )
    • 或者换句话说,一旦应用了第一个[0],你就剩下'a' == 'abc'[0](它给出了列表的第一个元素),然后,在应用了第二个[0] ,剩下的是'a' == 'a',其计算结果为True
    • @Ahmed ['abc'][0] 给你'abc''abc'[0] 给你'a'
    【解决方案3】:

    对于('abc'),您在('abc') 中得到'a',返回true。

    但是对于['abc'],因为它是一个数组列表,你在['abc'] 中得到'a' 返回false。

    示例:

    输入: ('abc') == 'abc'

    输出: True

    因此,如果我们在 ('abc') 中调用 'a',它与在 'abc' 中的 'a' 相同,因为 ('abc') 不是元组,但 'abc' 是字符数组,其中字符 'a ' 在字符串 'abc' 的索引 0 中。

    另一方面,['abc'] 是数组列表,其中 'abc' 是单个字符串,位于数组 ['abc'] 的索引 0 处。

    元组示例: x = ('abc', 'def', 'mnop')

    数组示例: x = ['abc', 'def', 'mnop']

    x = ('abc'), y = 'abc'
    

    这里总是x == y

    但如果是'a' in ['abc'] =>

    x = ['abc'], y = 'abc'
    

    这里是x != yx[0] == y

    【讨论】:

      【解决方案4】:

      正如其他人所提到的,('abc') 不是一个元组。 'a' 不是 ['abc'] 的元素。该列表中唯一的元素是'abc'

      x='abc' in ['abc']
      
      print (x)
      
      True #This will evaluate to true
      

      这也将评估为真:

      y = 'a' in ['a','b','c']
      
      print (y)
      
      True
      

      【讨论】:

        【解决方案5】:

        ('abc') 等价于'abc'

        'a' in ('abc') 等价于'a' in 'abc'

        'a' in ('abc', )'a' in ['abc'] 的形式返回False

        'a' in ['a', 'b', 'c']'a' in 'abc' 的形式返回True

        【讨论】:

          猜你喜欢
          • 2020-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多