Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查一对字符串是否是压缩列表的子字符串-python_Python_Python 3.x_Python 2.7_Zip_Substring - Fatal编程技术网

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

检查一对字符串是否是压缩列表的子字符串-python,python,python-3.x,python-2.7,zip,substring,Python,Python 3.x,Python 2.7,Zip,Substring,问题是: 如果您有alpha,它需要认识到alpha相当于alpha 1、alpha 100、zoom alpha,等等。这可以通过y中的x来完成。 但是,我需要能够同时(一次两次)完成整个拉链 例如: 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 a

问题是:

如果您有
alpha
,它需要认识到
alpha
相当于
alpha 1
alpha 100
zoom alpha
,等等。这可以通过
y中的x
来完成。 但是,我需要能够同时(一次两次)完成整个拉链

例如:

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)
结果必须是:

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']

因此,基本上,在进行验证时,它需要检查
(b,s)
中的
(b\u列表,s\u列表)
对是否与
(approved\u b,approved\s)匹配
并且
b
可以是
approved\u b
的子字符串,
approved\u b
可以同时是
b
的子字符串,
s
可以是
approved\u s
的子串,
approved\u s
可以是
s
的子串,我不得不从你的代码中做出很多假设,因为我没有完全理解你的描述。听起来您只想在
approved
列表中匹配整个单词,因此您可以在每个条目的
split()
上使用
in
,例如:

br=['alpha','gamma']
sr=['gary','lime']
从更长远的角度来看,这将是:

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')

希望这能有所帮助。

你的要求还不完全清楚。但是,如果您可以使用只处理
b
值的
y中的x
向我们显示您的代码,那么应该很容易向您展示如何将其更改为处理
zip(b,s)
值。为什么
ohm,apple
不会出现在输出中,因为
在“ohm”中的“ohm”和在“appler”中的“apple”==True
?注意:
b在approved_b中,approved_b在b=>b==approved_b
-我不确定你的意思。在这一点上,我认为“appler”中的“apple”不应该返回true。因此,只有当“apple”+其他东西(比如“apple SDGSD”)时,它才应该返回true。但无论哪种方式都可以。b=alpha,approved_b=alpha 1,因此approved_b中的b将返回true。但我需要检查zip的两个内容。此外,我需要能够检查b中的approved_b是否也返回true(或not),这似乎是我正在寻找的。我仍在处理数据,以检查它是否正常工作。泰!您可能希望将已批准的列表预拆分为单词集,因为使用单词集列表将显著提高性能。
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)