gpt4 book ai didi

python - 在子列表中查找一个值,并用其元素值减去前一个元素值

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:51 25 4
gpt4 key购买 nike

我想在列表列表中找到一条记录,在本例中是 3 并获取将其元素 [2] 与之前记录中的元素 [2] 相减

mylist = [
["acc", 2, 3.1,4.3,"pe"],
["fir", 1, 3.5,5.2,"p1"],
["sec", 3, 1.1,5.8,"pe"],
["set", 5, 6.2,6,2,"pa"],
["eve", 8, 5.4,5.7,"io"],
["ewa", 3, 4.1,4.1,"po"]
]

结果应该是:

3.5 - 1.1 和 5.2 - 5.8
5.4 - 4.1 和 5.7 - 4.1


我可以用这段代码得到它,但我想学习一些更好、更简单的方法来做到这一点,谢谢。

i=0    
while i<len(mylist)-1:
if mylist[i][1] == 3:
print mylist[i-1][2]-mylist[i][2]
print mylist[i-1][3]-mylist[i][3]
i+=1

最佳答案

您可以使用 for 循环来代替 while 循环。

for row1, row2 in zip(mylist[1:], mylist[0:-1]):
if row1[1] == 3:
print [y - x for x, y in zip(row1[2:4], row2[2:4])]

您还可以使用izip来节省一些内存。方法而不是 zip方法。

from itertools import izip

for row1, row2 in izip(mylist[1:], mylist[0:-1]):
if row1[1] == 3:
print [y - x for x, y in izip(row1[2:4], row2[2:4])]

这些代码片段将输出

[2.4, -0.6]
[1.3, 1.6]

izip() 使用 generators而不是列表。这可以提高脚本的性能,并节省内存。

如果您喜欢上述代码的较短版本,则可以使用列表推导式。

from itertools import izip
print [[y - x for x, y in izip(row1[2:4], row2[2:4])] for row1, row2 in izip(mylist[1:], mylist[:-1]) if row1[1] == 3]

输出:

[[2.4, -0.6], [1.3, 1.6]]

您还可以制作上述生成器

for val in ([y - x for x, y in zip(row1[2:4], row2[2:4])] for row1, row2 in zip(mylist[1:], mylist[:-1]) if row1[1] == 3):
print val

输出:

[2.4, -0.6]
[1.3, 1.6]

请记住,通过这样做,生成器在您访问最后一个项目后就会耗尽,因此如果您需要存储输出的值,则不应使用生成器。

关于python - 在子列表中查找一个值,并用其元素值减去前一个元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19980760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com