我有一个清单。例如:
[0, 0, 1, 0, 0, 1, 0]
我想知道最有效的计算方法是什么1 -> 0过渡。例如,在本例中,答案为 2(在 2-3 和 5-6 位置)
我尝试了以下方法:
stat=[0, 0, 1, 0, 0, 1, 0]
pair1=stat[:-1]
pair2=stat[1:]
result=len([i for i in zip(pair1, pair2) if i==(1,0)])
我想知道是否有更好的方法
这里有3种方法:
from itertools import islice
import numpy as np
lst = [0, 0, 1, 0, 0, 1, 0]
res1 = sum(i - j == 1 for i, j in zip(lst, lst[1:])) # 2
res2 = sum(i - j == 1 for i, j in zip(lst, islice(lst, 1, None))) # 2
res3 = np.sum(np.diff(lst) == -1) # 2
解释
- 第一种方法利用
sum
用生成表达式和zip
循环成对元素。
- 第二种方法与第一种方法类似,但性能更好,因为它避免了显式构建第二个列表。
- 第三种方法利用第三方
numpy
库,是一种矢量化方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)