【问题标题】:"Not In" If statement not operating correctly“Not In”If 语句未正确运行
【发布时间】:2015-07-20 20:14:15
【问题描述】:
if ('SCT', 'OVC', 'CLR') not in words[i]:
   list_stat.append(words[i])
       i=i+1
       print words[i]
   else:
       i=i+1    

我正在尝试在 Python 中创建 or 语句来解析列表。关键字的数量比您在 if 语句中看到的三个要长得多,因此嵌套的 if 语句会很快变得非常多余。我对 Python 有点陌生,但 not in 语句似乎最有效地将我的所有关键字组合在一起。问题是,我在尝试将元组与数组进行比较时不断出错。我也试过这种方式:

if words[i] not in ('SCT', 'OVC', 'CLR'):
   list_stat.append(words[i])
        i=i+1
        print words[i]
   else:
        i=i+1

两者都不能正常工作。我还应该提到第二种方式运行没有错误,但不会从我的列表中删除单词。这三个词在我的列表中多次单独出现,尽管 not in 声明的全部目的是摆脱它们。我试图摆脱这些词的所有个别实例。我也尝试过 {} 而不是 () 但都不会摆脱列表中的单个单词。关于我做错了什么有什么想法吗?

【问题讨论】:

  • words[i] 的值是多少?我们不是魔术师。
  • 第二个看起来更有可能工作,但你的缩进在任何一种情况下都是不寻常的。
  • 第二个看起来应该可以工作,除了缩进不好。 “不起作用”是什么意思?
  • if ('SCT', 'OVC', 'CLR') not in words[i] -> "如果元组('SCT', 'OVC', 'CLR')不在words[i]所在的任何数据结构中"
  • 另外,我猜你想要if not any(j in words[i] for j in ('SCT', 'OVC', 'CLR'))

标签: python list if-statement


【解决方案1】:

错误可能是由于缩进错误。除此之外,您可以使用for 循环来简化事情(它会为您执行i=i+1):

for i in range(len(words)):
    if words[i] not in ['SCT', 'OVC', 'CLR']:
        list_stat.append(words[i])
        print words[i]

不会从我的列表中删除字词

无论哪种方式,您都在填充新列表 (list_stat),而不是从 words 中删除。

【讨论】:

  • 整数在这里似乎没有用。你可以用“for word in words”
  • 你是对的,虽然我不确定这是整个代码。此外,ginger 似乎知道in 运算符。
【解决方案2】:
list_stat.append([x for x in words if x not in ('SCT', 'OVC', 'CLR')])

“从words 中的每个单词制作一个列表,前提是它不在('SCT', 'OVC', 'CLR') 中。将此新列表附加到list_stat

【讨论】:

    【解决方案3】:

    你没有解释你到底想要做什么,但看起来你正在实现集合操作 - 在 python 中具有本机实现

    见:https://docs.python.org/2/library/sets.html

    具体来说:

    if set(['SCT', 'OVC', 'CLR']) & words[i] # intersection is not empty - one of the words is in words[i]
    ...
    

    【讨论】:

      猜你喜欢
      • 2018-08-03
      • 1970-01-01
      • 2019-08-28
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 2021-09-07
      相关资源
      最近更新 更多