python - 循环抛出二维数组并在每个地方打印出最常见的字符 Python
问题描述
我有一个 5x10 大小的二维数组,如下所示:
[[ '0', 'A', 'M', 'P', '0', '0', 'a', '0', '0', '0'],
[ '0', 'H', '0', 'Q', '0', '0', 't', '0', '0', '0'],
[ 'q', 'C', 'M', 'P', 'r', '0', '0', '0', 'w', 'i'],
[ '0', 'H', '0', 'P', '0', 't', 'h', '0', '0', '0'],
[ '0', 'C', 'M', 'Q', 'r', '0', '0', '0', 'r', 'p']]
我想以一种循环遍历列而不是行的方式遍历这个数组。我检查最常见的字符(不是数字),然后打印出最常见的字符。如果列中有同样常见的字符,则随机选择最常见的字符之一。例子:
第一列只有 1 个字符“q”,所以这很容易。在第二列中,有 2 个常见字符“C”和“H”,因此只需随机选择其中一个,依此类推。
有人可以帮我解决这个问题。我真的不知道该怎么办。谢谢!
编辑
我现在可以遍历列并打印出每列中的值。剩下的就是打印出最常见的一个。
for i in range(0, 10):
for row in arr:
print(row[i])
第一列的示例输出:
0
0
q
0
0
解决方案
您可以使用random.choice
和statistics.multimode
:
>>> from random import choice
>>> from statistics import multimode
>>> table = [
[ '0', 'A', 'M', 'P', '0', '0', 'a', '0', '0', '0'],
[ '0', 'H', '0', 'Q', '0', '0', 't', '0', '0', '0'],
[ 'q', 'C', 'M', 'P', 'r', '0', '0', '0', 'w', 'i'],
[ '0', 'H', '0', 'P', '0', 't', 'h', '0', '0', '0'],
[ '0', 'C', 'M', 'Q', 'r', '0', '0', '0', 'r', 'p']
]
>>> for column in zip(*table):
alphas = [char for char in column if char.isalpha()]
if alphas:
print(choice(multimode(alphas)))
else:
print(None)
q
C
M
P
r
t
t
None
r
p
python 3.8+
可以将生成器理解与海象运算符一起使用:
>>> print(*[
choice(multimode(alphas))
if (alphas:= list(filter(str.isalpha, column))) else None
for column in zip(*table)
], sep='\n')
q
H
M
P
r
t
h
None
w
i
推荐阅读
- archlinux - /usr/lib/libblkid.so.1:找不到版本 BLKID_2_37
- regex - 具有连续五位数字和任何字母的字符串数据的正则表达式
- javascript - Angular中setTimeOut的单元测试
- laravel - laravel 8 中 public_path() 的替代函数
- r - bind_tf_idf()错误:在tapply(n,文档,总和)中:参数必须具有相同的长度
- javascript - React Native 按日期排序数组
- python - 无法通过连接我的前端的 REST API 检索图像和视频
- redis-cache - 如何使用 .net 核心在 RedisCache 的 Google 内存存储上执行键(读、写、删除)
- wordpress - 在 WordPress 中扩展媒体库
- javascript - 在控制台上手动抛出状态码错误