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,以此类推。只记录连续性出现的偶数,如果中间出现不是偶数,计数自动重新开始,该怎么写

阅读 4.4k
1 个回答

用 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]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题