检查一对字符串是否是压缩列表python的子字符串

2024-05-13 01:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

b_list=["some data"]
s_list=["some data"]

approved_b=[list of "b_list" elements that are approved]
approved_s=[list of "s_list" elements that are approved]

br, sr=[],[]
for b,s in zip(b_list, s_list):
    if (b,s) in zip(approved_b, approved_s):
        br.append(b)
        sr.append(s)

问题在于:

如果您有alpha,它需要认识到alpha等价于alpha 1alpha 100zoom alpha,等等。这可以由x in y完成。 但是,我需要能够同时做(一次两次)整个拉链。你知道吗

示例:

b_list=['alpha', 'beta time', 'gamma', 'ohm']
s_list=['gary', 'paul', 'lime', 'apple']

approved_b=['alpha 1', 'beta', 'gamma 2', 'ohm']
approved_s=['gary time', 'zoom', 'lime time', 'appler']

结果需要:

br=['alpha','gamma']
sr=['gary','lime']

所以基本上,在进行验证时,它需要检查(b_list, s_list)中的(b,s)对是否与(approved_b,approved_s)匹配,并且b可以是approved_b的子串,approved_b可以是b的子串,s可以是approved_s的子串,approved_s可以是s的子串。你知道吗


Tags: ofinbralphadatatimesomeelements
1条回答
网友
1楼 · 发布于 2024-05-13 01:24:26

我不得不从你的代码中做出很多假设,因为我没有完全理解你的描述。听起来你只想在approved列表中匹配一个完整的单词,所以你可以在每个条目的split()上使用in,例如:

def match_pair(e1, e2, lst1, lst2):
    return any(e1 in l1.split() and e2 in l2.split() for l1, l2 in zip(lst1, lst2))

In []:
br, sr = zip(*[(b, s) for b, s in zip(b_list, s_list) 
               if match_pair(b, s, approved_b, approved_s)])
print(br)

Out[]:
('alpha', 'gamma')

In []:
print(sr)

Out[]:
('gary', 'lime')

在更长期的情况下,这将是:

br, sr = [], []
for b, s in zip(b_list, s_list):
    if match_pair(b, s, approved_b, approved_s):
        br.append(b)
        sr.append(s)

希望这有帮助。你知道吗

相关问题 更多 >