比较2个列表中相同索引上的项目

时间:2017-10-27 11:45:56

标签: python

我有2个列表:(实际列表更长)

list1 = ['ARHEL 7 FY2017 64-bit', u'7.2', 'BRHEL 7 FY2017 64-bit', u'7.3']

list2 = [(u'RHSA-2017:2796', u'6.7'), (u'RHSA-2017:2794', u'7.2'), (u'RHSA-2017:2793', u'7.3')]

如何比较列表之间的第二个项目编号,即6.77.27.3,如果两个列表中的项目匹配, 就像我们在list1第4项中7.3一样 和list2第三元组项目2,也是7.3

然后创建一个新的元组列表(如构造列表2) 把匹配前的项目带到7.3 这是' BRHEL 7 FY2017,64位'并将其添加到新的元组列表

list 3 = [('ARHEL 7 FY2017 64-bit', u'7.2'), ('BRHEL 7 FY2017 64-bit', u'7.3')]

3 个答案:

答案 0 :(得分:0)

如何使用以下单行解决方案

>>> list3 = [(list1[list1.index(v)-1],v) for (k,v) in filter(lambda el:el[1] in list1, list2)]
>>> list3
[('ARHEL 7 FY2017 64-bit', '7.2'), ('BRHEL 7 FY2017 64-bit', '7.3')]

<小时/> 在详细信息中,首先您获得list2的过滤版本,受限制,以便它仅包含list1也包含

的值

>>> list2_filtered = filter(lambda el:el[1] in list1, list2)

然后,您检索list1v个值list2_filtered之前的元素

>>> list3 = [(list1[list1.index(v)-1],v) for (k,v) in list2_filtered]
>>> list3
[('ARHEL 7 FY2017 64-bit', '7.2'), ('BRHEL 7 FY2017 64-bit', '7.3')]

答案 1 :(得分:0)

list1 = ['ARHEL 7 FY2017 64-bit', u'7.2', 'BRHEL 7 FY2017 64-bit', u'7.3']
list2 = [(u'RHSA-2017:2796', u'6.7'), (u'RHSA-2017:2794', u'7.2'), (u'RHSA-2017:2793', u'7.3')]

result = []
for n,v in list2:
    if v in list1:
        idx = list1.index(v)
        if idx != 0: result.append((list1[idx-1], v))

print(result)

输出:

[('ARHEL 7 FY2017 64-bit', '7.2'), ('BRHEL 7 FY2017 64-bit', '7.3')]

答案 2 :(得分:0)

如你所愿:

  

获取比赛前的项目

     

一线解决方案:

print([(list1[index-1],item) for index,item in enumerate(list1) for item1 in list2 if item==item1[1]])

输出:

[('ARHEL 7 FY2017 64-bit', '7.2'), ('BRHEL 7 FY2017 64-bit', '7.3')]
  

详细解决方案:

list_3=[]
for index,item in enumerate(list1):
    for item1 in list2:
        if item==item1[1]:
            list_3.append((list1[index-1],item))

print(list_3)

输出:

[('ARHEL 7 FY2017 64-bit', '7.2'), ('BRHEL 7 FY2017 64-bit', '7.3')]