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 b
。 or
运算符的工作方式如下:
-
如果
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!')
基本上,如果给定迭代的至少一个元素是truthy
,any
返回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字符串中的逻辑运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章