使用“ in”运算符时,如何避免出现包含搜索字符串一部分的字符串?

时间:2018-08-08 22:44:14

标签: python string python-3.x list operators

我知道那里有几篇关于如何在字符串中找到子字符串的文章,但是我有相反的问题。当使用“ 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]

我的代码是否有问题,或者是否有其他运算符可以帮助我达到相同的结果?

2 个答案:

答案 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]