我有两个具有一些共同点的清单:
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]
谢谢!
答案 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])
这将检查索引是否不扩展边界,因此,每当没有后继者时,列表将保持不变。