【问题标题】:Python's "in" operator with set {} [closed]Python的“in”运算符与set {} [关闭]
【发布时间】:2018-11-18 09:03:17
【问题描述】:

我正在尝试了解in 运算符在 Python 中的用法。 以下情况有什么区别吗?

案例一:

a = "Hello"
b = "Help"
b[0] in {a[0], '.'} #case1_variant
>> True


案例二:

a = "Hello"
b = "Help"
b[0] in a[0] #case2_variant
>> True

虽然输出相同,但我想了解case1_variant 代表什么。

【问题讨论】:

标签: python in-operator


【解决方案1】:

第一个是一个集合对象,里面有a的第一个字母,加上句号。它是in 可以操作的序列类型。

第二个是一个包含单个字符的字符串。它也是一个序列类型,in 运算符也可以对其进行操作。第二个没有句号。

【讨论】:

  • 你能举出另一个使用in运算符的例子吗?
  • @hard-fault 句号没有特殊含义,它只是集合中的另一个元素(未使用)。它可以是任何其他字符,它仍然可以工作(事实上,如果没有第二个元素它会工作,因为您要检查的只是该字符是否 in 集合,以及任何其他字符不影响结果)。
  • 谢谢!知道了。如果a = "Hello""e" in {a[0], "e"} 给出True
【解决方案2】:

从字面上看,第一个相当于检查"H" in "H.";在您的情况下,您正在迭代set 的两个字符。这在字符匹配的第一次迭代中停止。因此,. 可以是任何东西,True/False、数字、None 等。

第二个只是检查"H" in "H",这显然是正确的

【讨论】:

  • 当我们谈论“等价”时,我认为重要的是要注意意味着是不同的。 set 需要 O(n) 散列,然后是 O(1) 查找,而在字符串中搜索字符是 O(n)。如果您将集合存储在某个地方并重复使用,前者会更有效。
  • 在这两种情况下仍然是 O(n),但直到至少重新散列集合对象 n 次
【解决方案3】:

in 关键字有两个用途:

  1. in 关键字用于检查值是否存在于序列(列表、范围、字符串等)中。
  2. in 关键字还用于遍历 for 循环中的序列:

从您的示例中的 in 关键字的角度来看,这两种情况之间没有区别。它们都适用于in 关键字的首次使用。 in 关键字检查变量是否存在于数据集或数据列表中。您提供了两种不同的有效数据类型,并检查了“H”是否在其中任何一种中,并确保“H”在您检查的每个变量中。

期间应该对数据没有影响。只是数据中的一项与in 正在查找的条件不匹配。

【讨论】:

  • 谢谢!知道了。如果a = "Hello""e" in {a[0], "e"} 给出True
  • 是的,因为您在 {"H","e"} 中在功能上说“e”。如果你在 {a[0],"."} 中做了“e”,那将是 False。”
猜你喜欢
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 2011-01-14
相关资源
最近更新 更多