Python:如何检查列表中的一个字符串是否是anther列表中任何字符串的一部分

时间:2017-11-02 05:08:25

标签: python string comparison

如果

,我的代码就像这样
listOne = ['hello','hi','bye']
listTwo = ['goodbye','bye']

for x in range(0,len(listOne))
    listOne[x] in listTwo

>>>True

但请考虑这种情况:

listOne = ['hello','hi','bye']
listTwo = ['goodbye','by']

for x in range(0,len(listOne):
    listOne[x] in listTwo

>>>False

我需要找到listTwo中的字符串是否是listOne中字符串的一部分。但是,我需要让每个循环在listOne中检查每个实例上的listTwo中的所有项

谢谢!

5 个答案:

答案 0 :(得分:3)

尝试这种方式:

listOne = ['hello','hi','bye']
listTwo = ['goodbye','by']

for x in listTwo:
    if any(x in e for e in listOne):
        print(x)

它将打印'by',因为'by'是listOne中'bye'的一部分。

答案 1 :(得分:0)

listOne = ['hello','hi','bye']
listTwo = ['goodbye','by', 'bye']

for x in listOne:
    for y in listTwo:
        if y in x:
            print(x, y, True)
        else:
            print(x, y, False)

输出

hello goodbye False
hello by False
hello bye False
hi goodbye False
hi by False
hi bye False
bye goodbye False
bye by True
bye bye True

答案 2 :(得分:0)

最简单的解决方法

any( x for x in listTwo if  x in listOne)

答案 3 :(得分:0)

听起来你想通过部分匹配匹配字符串。

您可以使用list(string)将字符串分解为单个字符,并根据需要对每个字符进行比较。

示例:

bye = list('bye')
goodbye = list('goodbye')
lettersMatched = 0

for x in range(len(bye)):
    for y in range(len(goodbye)):
        if bye[x] == goodbye[y]:
            lettersMatched += 1

>>>lettersMatched
   3

这允许您设置要匹配的最小字符的要求,但不要使用此代码,它仅用于概念。这也符合字谜。使用正则表达式可能会更好。例如,如果您希望将“bye”与​​“goodbye”匹配,则可以使用较小的单词作为模式制作正则表达式。

另一个用途是你可以使用re.match('b?y?e?')作为模式将'bye'与'by'匹配,但由于它将每个字符视为可选项,因此它也会与'be'匹配。

希望这些想法对您有所帮助! :)

答案 4 :(得分:0)

  

一线解决方案:

print([item for item in listTwo for match in listOne if item in match])

输出:

['by']
  

详细解决方案:

for item in listTwo:
    for match in listOne:
        if item in match:
            print(item)