计算列表中连续元素的数量

时间:2019-03-13 11:47:50

标签: python numpy

我有一个类似的numpy数组:

array([100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
    100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
    100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
    100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
    100, 100, 100, 100, 100, 300, 100, 100, 100])

我需要计算连续的'100'个元素的数量。 '100'元素之间的值大于100。

输出应如下所示:

[5,8,8,7,8,8,7,3]

3 个答案:

答案 0 :(得分:2)

这是在this帖子中采用@Jaime解决方案的一种方式:

a = np.array([100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
100, 100, 100, 100, 100, 300, 100, 100, 100])

c = a == 100
np.diff(np.where(np.concatenate(([c[0]], c[:-1] != c[1:], [True])))[0])[::2]
# array([5, 8, 8, 7, 8, 8, 7, 3])

答案 1 :(得分:1)

这是一个简单的python脚本:

arr = [100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
    100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
    100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
    100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
    100, 100, 100, 100, 100, 300, 100, 100, 100]

check = arr[0]
result = []
count = 0
for el in arr:
    if el == check:
        count+=1
    else:
        check = el
        if count>1:
            result.append(count)
        count = 1
result.append(count)

print(result)
[5, 8, 8, 7, 8, 8, 7, 3]

答案 2 :(得分:0)

将numpy数组转换为这样的列表:

a = [100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 300, 100, 100, 100]

尝试:

from itertools import groupby
b = [sum(1 for i in g) for k,g in groupby(a) if k==100]

输出

b = [5, 8, 8, 7, 8, 8, 7, 3]