比较两个列表并在条件满足后获得第一个值

时间:2020-03-14 23:22:27

标签: python list

我有两个具有一些共同点的清单:

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]

如何比较两个列表以获取列表b中相同元素之后列表a中的第一个元素? 预期输出为:

c = [300.87, 700.19]

谢谢!

5 个答案:

答案 0 :(得分:2)

当第一部分位于b中时,我将用列表本身压缩列表并返回元组的第二部分:

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]

[n for m, n in zip(a, a[1:]) if m in b]
# [300.87, 700.19]

如果b很大,则效率可能很低,但可以很好地处理边缘情况,例如不同的订单或a的最终商品属于b

答案 1 :(得分:1)

您可以使用索引位置解决此问题。

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]
c = []
for x in b:
    c.append(a[a.index(x)+1])

如果您运行此程序,则c = [300.87, 700.19]

答案 2 :(得分:1)

您可以对list.index使用列表推导:

[a[a[:-1].index(e) + 1] for e in b]

输出:

[300.87, 700.19]

避免太多切片:

s = a[:-1]
[a[s.index(e) + 1] for e in b]

答案 3 :(得分:1)

这是一种冗长的方法,它检查b中的值是否确实存在于a中,以便避免不存在的错误:

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]
c = []
for v in b:
    try:
        i = a.index(v)
    except ValueError:
        i = -1
    if i >= 0 and i < len(a) - 1:
        c.append(a[i+1])
    else:
        c.append(float('nan'))

print(c)

输出:

[300.87, 700.19]

答案 4 :(得分:1)

只要项目是列表a的元素,您就可以遍历输入列表c并将继承者附加到列表b

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]

c = []
for index, item in enumerate(a):
    if item in b and index < len(a) - 1:
        c.append(a[index+1])

这将检查索引是否不扩展边界,因此,每当没有后继者时,列表将保持不变。

相关问题