比较两个列表中同一索引上的项

2024-06-02 08:08:49 发布

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

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

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,以及两个列表中的项目是否匹配, 就像我们在列表1中的第4项,7.3 和list2第三元组项2,它也是7.3

然后创建一个新的元组列表(就像构建了列表2) 将匹配项之前的项带到7.3 即“BRHEL 7 FY2017 64位”,并将其添加到新元组列表中

^{pr2}$

Tags: 项目列表bit元组list2list1项目编号pr2
3条回答

使用下面的单线解决方案怎么样

>>> 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也包含的值 ^{pr2}$

然后检索list1的元素,该元素位于list2_filtered值的每个v之前

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

如您所愿:

taking the item that comes before the match

One line solution :

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

输出:

^{pr2}$

Detailed solution:

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)

输出:

^{pr2}$
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)

输出:

^{pr2}$

相关问题 更多 >