gpt4 book ai didi

python - 将数组值的增量减少到 1

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:06 24 4
gpt4 key购买 nike

我正在尝试创建一个列表(例如 B),该列表仅在另一个列表(例如 A)的值存在差异时才递增,例如:

[1,1,2,2,4,4][0,0,1,1,2,2]

[1,1,1,1,4,4,4,4][0,0,0,0,1,1,1,1]

下面的代码是这样做的:

boxes=[1,1,1,1,4,4,4,4]
positions=[0]
position=0
for psn,box in list(enumerate(boxes))[:-1]:
if boxes[psn+1]-box ==0:
increment=0
else:
increment=1
position=position+increment
positions.append(position)
print(positions)

任何人都可以建议使用列表推导来做到这一点(最好使用 lambda 函数)吗?

最佳答案

下面是使用 numpy 的方法:

a = [1,1,2,2,4,4]
[0] + np.cumsum(np.clip(np.diff(a), 0, 1)).tolist()
[0, 0, 1, 1, 2, 2]

或者另一个例子:

a = [1,1,1,1,4,4,4,4]
[0] + np.cumsum(np.clip(np.diff(a), 0, 1)).tolist()
[0, 0, 0, 0, 1, 1, 1, 1]

详情

a = [1,1,2,2,4,4]

np.diff得到数组的第一个差

np.diff(a)
array([0, 1, 0, 2, 0])

并使用 np.clip限制 01 之间的值:

np.clip(np.diff(a), 0, 1)
array([0, 1, 0, 1, 0])

最后取np.cumsum并在开头添加一个 0,因为差异将为您提供一个长度为 n-1 的数组:

[0] + np.cumsum(np.clip(np.diff(a), 0, 1)).tolist()
[0, 0, 1, 1, 2, 2]

关于python - 将数组值的增量减少到 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54112640/

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