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

标签 python list numpy

我正在尝试创建一个列表(例如 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/

相关文章:

python - NumPy 数组中沿给定轴的一阶差分

python - 属性错误 : '_process_plot_var_args' object has no attribute 'get_next_color'

c# - 将类成员的值添加到数组 C#

python - 如果列表尚未包含所述字符串,则将字符串添加到嵌套的字符串列表

python - 用 numpy 表示我的数据的推荐方法

python - Numpy Correlate 不提供偏移量

javascript - SQLFORM 翻译的 Web2py 问题

Python - 检查文件中行​​的顺序

python - 具有多重继承的Django自定义字段

r - 将常数和所有较低的自然数 append 到列表中的数字