我知道那里有几篇关于如何在字符串中找到子字符串的文章,但是我有相反的问题。当使用“ in”运算符时,如何避免出现包含搜索字符串一部分的字符串?
例如,我希望所有包含'kmt2d'
的列表都返回True
。但是,包含'set2d'
的列表也会返回True
,因为两者之间有't2d'
公用子字符串。
这是我的代码示例:
listone = ['kmt2d']
listtwo = ['set2d', 'hgt', 'kmt2d']
listthree = []
for i in listtwo:
for k in listone:
if k in i:
listthree.append(True)
else:
listthree.append(False)
listthree的输出显示为:
listthree = [True, False, True]
但是,我希望它是:
listthree = [False, False, True]
我的代码是否有问题,或者是否有其他运算符可以帮助我达到相同的结果?
答案 0 :(得分:1)
尝试以下操作:
one = ['kmt2d']
two = ['set2d', 'hgt', 'kmt2d']
three = [item for item in two if item in one]
# which is:
three = []
for item in two:
if item in one:
three.append(item)
在第二个循环中,您循环浏览第二个列表,这意味着in
运算符将扫描字符串,而不是扫描列表中是否存在该字符串。不用第二个循环,而使用in
只是为了测试该项目是否出现在列表中,而无需实际扫描字符串本身。
答案 1 :(得分:1)
此代码可以正常工作:
listone = ['kmt2d']
listtwo = ['set2d', 'hgt', 'kmt2d']
listthree = []
for i in listtwo:
for k in listone:
if k in i:
listthree.append(True)
else:
listthree.append(False)
输出:
listthree = [False, False, True]