将数组值的增量减少为1

2024-06-09 00:00:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个列表(比如B),它只在另一个列表的值有差异时才递增(比如A),例如:

[1,1,2,2,4,4]到{}或

[1,1,1,1,4,4,4,4]到{}等

下面的代码可以做到这一点:

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函数)来实现它的建议吗?在


Tags: 代码inbox列表forifposition差异
3条回答

我看到了新的解决方案,所以我们开始吧。在

digitize

np.digitize(A, np.unique(A)) - 1
# array([0, 0, 0, 0, 1, 1, 1, 1])

factorize

^{pr2}$

groupby和{}

pd.Series(A).groupby(A).ngroup()

0    0
1    0
2    0
3    0
4    1
5    1
6    1
7    1
dtype: int64

unique

np.unique(A, return_inverse=True)[1]
# array([0, 0, 0, 0, 1, 1, 1, 1])

将列表理解与itertools.accumulate结合使用:

from itertools import accumulate
from operator import add

list(accumulate([0] + [x != y for x, y in zip(A, A[1:])], add))
# [0, 0, 0, 0, 1, 1, 1, 1]

以下是使用nummpy的方法:

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

或者另一个例子:

^{pr2}$

详细信息

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

使用^{}获取数组的第一个差分

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

并使用^{}限制0和{}之间的值:

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

最后,取^{}并在开头添加一个0,因为这一差异将给您一个长度为n-1的数组:

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

使用itertools.groupby

from itertools import groupby

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

result = [i for i, (_, group) in enumerate(groupby(a)) for _ in group]
print(result)

输出

^{pr2}$

相关问题 更多 >