首页 > 解决方案 > 循环抛出二维数组并在每个地方打印出最常见的字符 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

标签: pythonmultidimensional-array

解决方案


您可以使用random.choicestatistics.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

推荐阅读