【问题标题】:How to find if part of a list is in str [closed]如何查找列表的一部分是否在 str [关闭]
【发布时间】:2016-03-21 21:17:10
【问题描述】:

我正在尝试做一个审查员。而不是做

if curseword in typed or curseword2 in typed or curseword3 typed:
    print "No cursing! It's not nice!"

我想制作一个包含所有单词的列表,并且可以检查这些单词是否在列表中。注意:如果您使用带有 while 循环的“if any...”代码,它有太多的输出需要处理。

【问题讨论】:

  • “代码必须与 while 循环兼容”是什么意思。究竟是什么意思?
  • @SiHa 我的意思是,如果该代码中有一个 for,它将无休止地喷出输出并破坏整个世界。我需要它没有 for 循环,否则会发生。
  • 我确定那是因为你实现的不正确。
  • 这样你可能会得到一些误报——但它并不像 Clbuttic 错误那么糟糕

标签: python loops


【解决方案1】:

你可以使用any加上一个生成器:

cursewords = ['javascript', 'php', 'windows']
if any(curseword in input for curseword in cursewords):
    print 'onoes'

或者,为了更灵活一点,一个正则表达式(如果你想做一些事情,比如检测大写诅咒词):

if re.search(r'javascript|php|windows', input, re.IGNORECASE):
    print 'onoes'

(如果您不熟悉正则表达式,the Python docs have got a nice tutorial。)

如果你只想忽略大小写而不弄乱正则表达式,你也可以这样做:

# make sure these are all lowercase
cursewords = ['javascript', 'php', 'windows']
input_lower = input.lower()
if any(curseword in input_lower for curseword in cursewords):
    print 'onoes'

【讨论】:

  • 关于正则表达式的方式,使用'|'.join(cursewords) 然后我们不需要手动从列表中输入这些单词:)
  • @KevinGuan 可能不是一个好主意——如果“诅咒词”包含正则表达式特殊字符怎么办?最好只使用一个正则表达式,这样您也可以执行java(script)? 之类的操作。
  • @KevinGuan 不,你想要'|'.join(map(re.escape, cursewords))。否则,您将逃避|s。
  • @Oughh 我不确定你想说什么。这不是无限循环。
  • @Oughh 我......仍然不知道你在说什么。作为一个单独的问题,也许这会更好——包括所有重现问题所需的代码。
【解决方案2】:

对输入使用 for 循环并检查每个单词以查看它是否在诅咒词列表中。

cursewordList = ['a','b' ...]

for word in input:
    if word in cursewordList:
          print "No cursing! It's not nice!"

【讨论】:

  • 这种方式具有更好的 big-O 复杂性 - 如果您将 cursewordList 设为 set
【解决方案3】:

同样使用过滤器内置方法:

>>>test = ['ONE', 'TWO', 'THREE', 'FOUR']
>>>input = 'TWO'

>>> if filter(lambda s: s in input, test):
    print 'OK'


OK
>>> input = 'FIVE'
>>> 
>>> if filter(lambda s: s in input, test):
    print 'OK'


>>> #nothing printed

【讨论】:

  • 该解决方案有效,但它会扫描每个诅咒词,即使它已经找到了一个。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2019-12-16
  • 2012-10-08
  • 2013-04-08
  • 2021-12-16
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
相关资源
最近更新 更多