我有一个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']]
我想循环遍历这个数组的方式是遍历列而不是行。我检查了最常见的char(不是数字),然后打印出最常见的字符。如果列中有同样常见的字符,那么随机选择一个最常见的字符。例子:
第一列只有1个字符"这很简单。第二列有两个常见字符& &;和";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