我有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.7
,7.2
,7.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')]
答案 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)
然后,您检索list1
个v
个值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')]