Python匹配两个列表之间的列表元素中的部分字符串

时间:2020-10-31 17:05:39

标签: python python-3.x for-loop if-statement nested-loops

在我的代码中,我试图将“匹配”项与“数据”列表中的字符串进行匹配。

我希望代码查看“匹配”列表中的第一个单词,如果它与数据“列表”中的字符串匹配,那么它将被添加到另一个列表中。 我想做的第二项检查是“匹配”列表中的前两个单词是否与数据中的字符串匹配。

目前,我的输出仅给我一个水实例12-而应该都将其拾起。

请有人让我知道我可能要去哪里了吗


match =['f helo','happy hellp','floral', 'alpha','12133','water12 puppies']
data=['f we are', 'hello there', 'alpha beta','happy today is the case','112133 is it', 'floral is my fave', 'water12 if healthy','water12 puppies are here and exist']

lst=[]
for i in match:
    for j in data:
        if i.split()[0] in j:
            lst.append(j)
            data.remove(j)
            break
        if len(i) > 1:
            k= ' '.join(i.split()[:2])
            if k in j:
                lst.append(j) 
                data.remove(j)
                break
                
    else:
        lst.append(i + ' - not found')

print(lst)

所需的输出:

output= [ 'f we are', 'alpha beta','happy today is the case','112133 is it', 'floral is my fave', 'water12 if healthy','water12 puppies are here and exist']

2 个答案:

答案 0 :(得分:1)

您不想从要迭代的列表中删除元素。相反,您可以添加条件以验证匹配的单词是否已添加到输出列表中。

应该是这样的:

 "jest": {
    "preset": "jest-expo",
    "transformIgnorePatterns": [
      "node_modules/(?!(jest-)?react-native|react-clone-referenced-element|@react-native-community|expo(nent)?|@expo(nent)?/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|@sentry/.*)"
    ]

我还删除了lst = [] for i in match: has_match = False for j in data: if i.split()[0] in j: has_match = True print(i, j) if j not in lst: lst.append(j) if len(i) > 1: k = ' '.join(i.split()[:2]) if k in j: has_match = True print(i, j) if j not in lst: lst.append(j) if not has_match: lst.append(i + ' - not found') 关键字,因为它们可能会阻止您的代码在break中的多个字符串中查找匹配项。使用布尔值即可完成工作。让我们知道您是否还有其他问题。

答案 1 :(得分:0)

尝试使用列表理解:

output = [x for x in data if any(True if z in x else False for z in x for y in match)]