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

Python 比较两个列表,在满足条件后获得第一个值,python,list,Python,List,我有两个列表,其中有一些相同的值: a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48] b = [200.04, 600.86] 如何比较这两个列表以获得列表a中的第一个元素,该元素位于列表b中的相同元素之后? 预期产出将是: c = [300.87, 700.19] 谢谢大家! 您可以使用索引位置来解决此问题 a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800

我有两个列表,其中有一些相同的值:

a = [200.04, 300.87, 400.19, 500.67, 600.86, 700.19, 800.48]
b = [200.04, 600.86]
如何比较这两个列表以获得列表a中的第一个元素,该元素位于列表b中的相同元素之后? 预期产出将是:

c = [300.87, 700.19]

谢谢大家!

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

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.87700.19]
您可以使用列表理解和
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]

下面是一种详细的方法,它检查
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)

只要项目是列表
b
的元素,就可以迭代输入列表
a
并将后续项附加到列表
c

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])
a=[200.04300.87400.19500.67600.86700.19800.48]
b=[200.04600.86]
c=[]
对于索引,枚举(a)中的项目:
如果b项和索引

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

我会将列表本身压缩,并在第一部分位于
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
的一部分,这可能会导致效率低下。如果
b
中的值是
800.48
,可能会返回一个NaN,实际上我认为我的列表中没有这个问题,但这是一个很好的观点,确切地说,问题是什么?你试过什么,做过什么研究吗?
b
的顺序重要吗?如果
b=[600.86200.04]
,答案应该是一样的吗?@AMC我尝试过使用列表理解,但与b比较后,我无法得到列表a中的第一个数字。实际上我没有。现在我正在考虑它,我也可以使用np.mask;)非常感谢。如果b元素中有800.48呢?你的for循环将被压碎,这很好。避免了
索引
的所有问题。
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])