我编写这段代码是为了通过检查描述(字符串)是否包含特定的关键字来整理一个新的标记列表。
例如
tagslist=['LED_AuraSync', 'LED_ARGB', 'LED_RGB', 'LED_Blue...',]
description=('Arctic Freezer 50 Dual Tower ARGB Heatsink ...')
tagged=[]
for tags in tagslist:
splitted=tags.split('_')[1]
if (splitted) in description:
tagged.append(splitted)
print(tagged)
这也会将ARGB和RGB添加到'tagged'列表中,这是错误的,因为描述实际上只包含ARGB,但是如果我用'in'操作数在'splitted'变量前后添加空格,它会正常工作
if (' '+splitted+' ') in description:
但我不明白它为什么会起作用,有人能解释一下吗?
1条答案
按热度按时间ux6nzvsh1#
靶区; DR
作为列表综合
为什么它一开始不起作用?(为什么后来起作用)
这个答案的关键部分是
in
运算符匹配字符串中的任何部分,不管你是否想一个字一个字地匹配**,所以"RGB" in "ARGB"
应该被计算为True
。但是如果你用空格分隔描述(将其转换为一个字符串列表),并使用
in
操作符,它会工作,因为它比较列表中的每个字符串,看看它们是否与给定的字符串相同,而不是匹配它的子字符串。通过使用
" " + splitted + " " in description
,您实际上匹配了splitted
及其周围的空白,因此当它是"RGB"
的迭代时,如果" RGB "
在描述中,则实际上是在进行投资,而它不在描述中,因此不将其追加到列表中。∮ ∮ ∮ ∮更深入的理解∮
我猜op对python没有太多的经验,所以我会在这里做一点解释:)
对名单的理解,
基本(不完全)等同于以下内容:
其中Warlus运算符
:=
将tag.split("_")[1]
分配给解析中的splitted以使其仅计算一次。另一种写法是
但是它将计算
tag.split("_")[1]
两次。