python字符串中的逻辑运算符[重复]

Posted

技术标签:

【中文标题】python字符串中的逻辑运算符[重复]【英文标题】:Logical operators in python strings [duplicate] 【发布时间】:2020-08-24 23:58:43 【问题描述】:

我知道这个问题太基础了,但我无法理解。 例如,如果必须在字符串中搜索任何N 单词,我该怎么做。我试过逻辑运算。

('browser' or 'chrome') in 'start game'

它将返回 false。

('browser' or 'chrome') in 'start chrome'

它将返回 True。

('browser' or 'chrome') in 'start chrome'

这应该返回 True,但它返回 false。 chrome字在字符串中,为什么返回false。

('browser' and 'chrome') in 'start chrome'

这将返回 True。但是为什么它返回true,即使只有一个单词匹配。

我想返回 True,即使一个单词匹配,不管它在哪个索引处。

【问题讨论】:

('browser' or 'chrome') 计算结果为 'browser'。您可以使用if any(x in 'start chrome' for x in ('browser', 'chrome')) 见How do “and” and “or” act with non-boolean values? any([a for a in ['browser',"chrome"] if a in 'start chrome']) 【参考方案1】:

您可能可以采用 2 种方法: 一种简单、动态性较低的方法:

"browser" in "start chrome" or "chrome" in "start chrome"

更长但更动态的方法:

def OneContains(l, text):
    for i in l:
        if i in text:
            return True
    return False


print(OneContains(["browser","chrome"],"start chrome"))

【讨论】:

我宁愿使用内置的any 代替或者写一个循环。【参考方案2】:

('browser' or 'chrome') 计算结果为 'browser'

见How do “and” and “or” act with non-boolean values?

你可以使用the any function:

if any(x in 'start chrome' for x in ('browser', 'chrome')):
    # at least one of the words is in the string 

和the all function:

if all(x in 'start chrome' for x in ('browser', 'chrome')):
    # both words are in the string

【讨论】:

【参考方案3】:

假设我们要计算a or bor 运算符的工作方式如下:

    如果a是真的,返回a 否则,返回b

如果你有两个以上的操作数,例如a or b or c or d,它就相当于a or (b or (c or d)),所以它会按照这个算法工作:

    如果a是真的,返回a 否则,如果b为真,则返回b 否则,如果c为真,则返回c 否则,返回d

所以这个表达式:('browser' or 'chrome') in 'start chrome' 不会像你期望的那样工作。首先,('browser' or 'chrome') 将评估为'browser'(因为'browser' 是真实的,任何非空字符串也是如此),而'browser' in 'start chrome'False

你可能想要使用的是:

('browser' in 'start chrome') or ('chrome' in 'start chrome')

或者你可以使用any,加上一个生成器理解:

string = 'start chrome'
if any(substring in string for substring in ['browser', 'chrome', 'chromium']):
    print('Ta da!')

或者,如果你真的喜欢map

if any(map(string.__contains__, ['browser', 'chrome', 'chromium'])):
    print('Ta da!')

基本上,如果给定迭代的至少一个元素是truthyany 返回True

a and b and c 的工作方式与or 类似: 1.如果a是假的,返回a 1.否则,如果b为假,则返回b 1、否则返回c

您可能想用以下内容代替 and-y 表达式:

('start' in 'start chrome') and ('chrome' in 'start chrome')

或者你可以使用all,类似于any,但是实现and-logic 或者or-logic:https://docs.python.org/3/library/functions.html#all

【讨论】:

以上是关于python字符串中的逻辑运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我想问下python中 逻辑与:“&”和“and”的区别

Python之运算符汇总

Python 中的运算符

字符串比较逻辑Python [重复]

Python3 运算符

python运算符Ⅵ