【问题标题】:python: if - in operator. Is there a difference between these two codes?python: if - in 运算符。这两个代码有区别吗?
【发布时间】:2019-03-23 16:25:26
【问题描述】:

这两个代码有区别吗?

if x in array[j] and array[j].index(x) == 0:

和,

if array[j] in x and x.index(array[j]) == 0:

如何解释这两个代码?

例如,它会是

'r','b','rbrb'

'BRBRBBBRBRRRBBB','BRBRBRRRBRRRBRB','BBBRBBBRBRRRBBB','BRBRBRRRBRRRB', 'BRBRBBBRBBBRB'

整个代码如下所示:

array = []
for i in range(3):
    x = input()
    flag = False
    for j in range(len(array)):
        if x in array[j] and array[j].index(x) == 0:
            array[j] = x
            flag = True
            break
        if array[j] in x and x.index(array[j]) == 0:
            flag = True
            break
    if not flag:
        array.append(x)

print(array)

我花了几个小时查看这段代码以获得一些想法,但我什至无法缩小我在搜索引擎中提出的问题,现在我变得更加困惑。

我熟悉类似...的代码

if x in listA:

listA.index(x) 

但是很难使用 flag = False 和

if x in listA[j]:

listA[j].index(x)

如果可能的话,我应该学习什么才能对这个问题有更多的理解?

感谢您的帮助!

【问题讨论】:

  • 是的,有区别。 "foo" in "foobar" 为真; "foobar" in "foo" 是假的。 in 不可交换。
  • 这是你写的吗?如果不是,那就不值得再看了:这是一个非常糟糕的例子。
  • 假设我们有两个案例。 'apple' in 'apple store''apple' in ['apple']。你可以从这个开始。

标签: python in-operator


【解决方案1】:

你的问题的答案是这两个代码之间的区别是完全不同的。

你应该学会从概念上分解事物。所以你明白了:

if x in listA:

但不是:

if x in listA[j]:

那么这个呢?:

listB = listA[j]
if x in listB

答案是 listA 是一个事物列表。这些东西是什么将根据您的代码和您正在尝试做的事情而有所不同。在这种情况下,listA 中的东西又是列表。上面的代码块演示了这一点。您可以将位置“j”的列表从 listA 中拉出,然后像使用任何其他列表一样使用它。它碰巧来自另一个列表并不重要。这是分解事物的概念:some_variable[some_index] 是一个概念,some_variable in some_list 是另一个概念。编程正是以这种方式组合事物。

所以这个:

if x in array[j] and array[j].index(x) == 0:

建议 array[j] 是一个列表,而 x 是您可能会在该列表中找到的东西。同样,由于 array[j] 是一个列表,您可以在其上调用 .index() 。这段代码根本没有说明 x 是什么。这只是可以放在列表中的东西。

if array[j] in x and x.index(array[j]) == 0:

这表明 x 是一个列表,而 array[j] 可能在该列表中。你只是颠倒了这两件事的角色。要意识到的重要一点是 xarray[j] 通常可以是同一个对象。只是在 x 的情况下,您可以直接引用该对象,而在 array[j] 的情况下,您将该对象从列表中拉出.

顺便说一句,我一直在说“列表”以保持简单。更准确地说,每当我说“列表”时,我的意思是 Python 序列类型,具有“第一项、第二项等”的概念。任何数量的东西,包括你自己定义的对象,都可以是序列类型,因此就是我们上面所说的“列表”。使用这样的代码,您通常处理的是一个“列表”,或者有时是一个“元组”,它只是一个您无法修改的“列表”。

【讨论】:

  • 您的慷慨解说我感激不尽!它确实极大地帮助我了解了这两个代码的区别。
  • 哇,谢谢!这让我感觉非常好。我真的很喜欢帮助新程序员。很高兴能帮到你!
  • 你好史蒂夫!你好吗?如果我没有打扰或打扰您,我可以问您一个关于超过时间限制的问题吗?我能想到的唯一能得到教育帮助的人就是你。除了这条评论,我不知道在哪里给你发消息,所以我来了!感谢您花时间阅读此内容:)
  • 当然!如果可以的话,我愿意帮助你。你有什么问题?
  • 感谢您的回复!希望你周六晚上过得愉快。实际上,我昨天在 Google Code Jam 上解决问题,在线判断系统显示我不断获得 TLE。我已将 input() 更改为 sys.stdin.readline() 并尝试使我的代码非常简单(我尝试过...)但问题尚未解决。
猜你喜欢
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多