我有一个 list 。例如:
[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
库,是一种矢量化方法。
关于Pythonic 方法来计算列表中特定邻居的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49680611/