python统计一个数值连续出现的次数

python统计一个数值连续出现的次数

import random

ou = "偶数"

ji = "奇数"

a = range(1,11)

x = 0

while x < 10:

list = random.sample(a,10)

print(list)

for y in list:

if y %2 == 0:

print(ou,end=",")

else :

print(ji,end=",")

print()#换行,如果不加这个的话就变成一长条了

x +=1

代码的结果如下

[6, 9, 8, 7, 4, 5, 3, 1, 10, 2]
偶数,奇数,偶数,奇数,偶数,奇数,奇数,奇数,偶数,偶数,
[6, 9, 4, 8, 2, 3, 10, 5, 7, 1]
偶数,奇数,偶数,偶数,偶数,奇数,偶数,奇数,奇数,奇数,
[6, 2, 3, 9, 7, 10, 4, 8, 5, 1]
偶数,偶数,奇数,奇数,奇数,偶数,偶数,偶数,奇数,奇数,
[8, 3, 1, 2, 9, 5, 4, 7, 6, 10]
偶数,奇数,奇数,偶数,奇数,奇数,偶数,奇数,偶数,偶数,
[8, 6, 4, 10, 9, 2, 5, 3, 7, 1]
偶数,偶数,偶数,偶数,奇数,偶数,奇数,奇数,奇数,奇数,
[2, 1, 4, 8, 9, 3, 10, 6, 7, 5]
偶数,奇数,偶数,偶数,奇数,奇数,偶数,偶数,奇数,奇数,
[2, 3, 10, 7, 1, 4, 6, 5, 9, 8]
偶数,奇数,偶数,奇数,奇数,偶数,偶数,奇数,奇数,偶数,
[3, 1, 10, 8, 6, 7, 2, 4, 9, 5]
奇数,奇数,偶数,偶数,偶数,奇数,偶数,偶数,奇数,奇数,
[5, 3, 4, 9, 6, 1, 2, 8, 10, 7]
奇数,奇数,偶数,奇数,偶数,奇数,偶数,偶数,偶数,奇数,
[1, 5, 4, 8, 6, 10, 2, 7, 9, 3]
奇数,奇数,偶数,偶数,偶数,偶数,偶数,奇数,奇数,奇数,

我想统计每个列表的第一位,比如说 第一个列表的第一位是偶数,第二个列表的第一位是偶数,那就记录为2,第三个列表的第一位是偶数,则记录为3,以此类推。只记录连续性出现的偶数,如果中间出现不是偶数,计数自动重新开始,该怎么写


回答:

用 numpy 吧,先把第一位的数值转换成 1 或 0, 1 代表需要统计。然后用累加、差值便可计算出连续出现的次数。

参考代码

import numpy as np

# 矩阵 10x10,元素随机范围 [1, 11)

data = np.random.randint(1, 11, (10, 10))

print(data)

# 对第一列取模(2),偶数成0,奇数成1

column0 = np.mod(data[:, 0], 2)

# 反转,偶数成1,奇数成0

mask = np.bitwise_xor(column0, 1)

# 开始和末尾各添加一个 0,作统计

mask0 = np.insert(mask, [0, len(mask)], 0)

# 累加

sum0 = np.cumsum(mask0)

# 取奇数位置对应的累加值

sum1 = sum0[mask0 == 0]

# 去重

sum2 = np.unique(sum1)

# 通过差值,反算连续个数

result = np.diff(sum2)

print('result:', result)

结果

[[ 6  7 10  8  7  2  8  7  8  2]

[ 4 7 7 9 1 9 6 8 6 6]

[ 4 4 9 7 6 2 5 7 10 7]

[ 9 9 6 1 10 2 9 9 7 1]

[ 7 1 6 10 9 1 7 7 8 4]

[ 1 9 1 6 1 7 10 1 8 7]

[ 6 4 2 3 7 6 2 1 9 1]

[ 4 7 7 2 9 5 9 3 9 1]

[ 3 1 4 5 1 6 4 5 8 9]

[ 4 4 3 10 10 3 5 10 3 7]]

result: [3 2 1]

以上是 python统计一个数值连续出现的次数 的全部内容, 来源链接: utcz.com/a/164270.html

回到顶部