首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查一对字符串是否为压缩列表的子字符串- python

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

Stack Overflow用户
提问于 2018-05-31 08:16:10
回答 1查看 290关注 0票数 0
代码语言:javascript
复制
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来完成。然而,我需要能够同时(一次两次)到整个zip。

示例:

代码语言:javascript
复制
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']

结果需要是:

代码语言:javascript
复制
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的子串。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-31 08:51:44

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

代码语言:javascript
复制
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')

在更长的手中,这将是:

代码语言:javascript
复制
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)

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50614980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档