我如何在python中比较两个列表,如果我有匹配项~>我想从另一个列表中匹配和下一个值

lsmd5eda  于 2023-01-01  发布在  Python
关注(0)|答案(4)|浏览(167)

a =[“白”、“1”、“23”、“本田”、“2”、“55”、“福特”、“11”、“88”、“特斯拉”、“15”、“1”、“起亚”、“2”、“3”]
B =['福特','本田']
应返回所有匹配项和列表a中的下一个值
结果-〉[“福特”、“11”、“本田”、“2”]或甚至更好[“福特11”、“本田2”]
我是python新手,需要帮助

czfnxgou

czfnxgou1#

下面是一个简洁的一行程序,它使用列表解析,一次迭代列表中的2个项(bi-gram),然后使用.join()将匹配项与下一个项组合起来

[' '.join([i,j]) for i,j in zip(a,a[1:]) if i in b]  #<------
['honda 2', 'ford 11']

解释:

1.可以使用zip(a, a[1:])一次迭代列表中的2个项(二元语法),作为大小为2的滚动窗口。

1.接下来,可以使用if i in b将每个元组(i[k],i[k+1])中的第一个项i[k]与列表b中的元素进行比较
1.如果匹配,则可以保留该元组,并使用' '.join([i,j])将它们连接成一个字符串。

pn9klfpd

pn9klfpd2#

与其更改数据以适应代码(一些响应者似乎认为这是适当的),不如尝试以下操作:

GROUP = 3

a = ['bmw', '1', '23', 'honda', '2', '55', 'ford', '11', '88', 'tesla', '15', '1', 'kia', '2', '3']
b = ['ford', 'honda']
c = [f'{a[i]} {a[i+1]}' for i in range(0, len(a)-1, GROUP) if a[i] in b]

print(c)
    • 输出:**
['honda 2', 'ford 11']
    • 注:**

这里的假设是输入数据以三个一组的形式呈现,但只需要每个三元组中的前两个值。
如果分组假设是错误的,则:

c = [f'{a[i]} {a[i+1]}' for i in range(len(a)-1) if a[i] in b]

......这将降低效率

kuarbcqp

kuarbcqp3#

假设所有的都是string类型,也假设在list a中的每个名称后面都会有一个数字。

    • 代码:-**
a = ['bww', '1', 'honda', '2', 'ford', '11', 'tesla', '15', 'nissan', '2']
b = ['ford', 'honda']

res=[]
for check in b:
    for index in range(len(a)-1):
        if check==a[index]:
            res.append(check+" "+a[index+1])
print(res)
    • 输出:-**
['ford 11', 'honda 2']
    • 列出理解**
    • 代码:-**
a = ['bww', '1', 'honda', '2', 'ford', '11', 'tesla', '15', 'nissan', '2']
b = ['ford', 'honda']

res=[check+" "+a[index+1] for check in b  for index in range(len(a)-1) if check==a[index]]

print(res) #Same output
pb3skfrl

pb3skfrl4#

我希望这对你有帮助

a = ['bww', 1, 'honda', 2, 'ford', 11, 'tesla', 15, 'nissan', 2]
b = ['ford', 'honda']
ls=[]
for item in b:
    if a.__contains__(item):
        ls.append((item+" "+str(a[a.index(item)+1])))
print(ls)

相关问题