我是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
显而易见,因为l2
比l1
短。
答案 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]