将列表与元组列表进行比较以获取另一个列表

时间:2018-06-12 19:37:09

标签: python list

我是python的新手,所以为这个天真的问题道歉。我有一个清单

l1 = [2, 4, 6, 7, 8] 

和另一个元组列表

l2 = [(4,6), (6,8), (8,10)]

我想输出一个大小为l3的列表l1,将l1的值与l2的第一个坐标进行比较并存储第二个坐标如果在l1中找到第一个坐标,则存储0。

输出:

l3 = [0, 6, 8, 0, 10]

我厌倦了做一个for循环,如:

l3 = []
for i in range(len(l1)):
   if l1[i] == l2[i][0]:
      l3.append(l2[i][1])
   else:
      l3.append(0)  

但这不起作用。它给出了错误

IndexError: list index out of range

显而易见,因为l2l1短。

2 个答案:

答案 0 :(得分:11)

您可以从l2

创建字典
l1 = [2,4,6,7,8] 
l2 =[(4,6),(6,8),(8,10)]
new_l2 = dict(l2)
l3 = [new_l2.get(i, 0) for i in l1]

输出:

l3 = [0,6,8,0,10]

答案 1 :(得分:1)

我总是会使用Ajax1234's solution,但我想说明如何使用for循环来实现它,如您所愿:

l3 = []
for elem in l1:
    pairs = list(filter(lambda x: x[0] == elem, l2))
    l3.append(pairs[0][1] if pairs else 0)

另一种方法是使用next()和列表理解而不是filter()和for循环。这个更有效率和可读性:

l3 = [next((u[1] for u in l2 if u[0] == elem), 0) for elem in l1]