【发布时间】:2020-05-12 22:13:58
【问题描述】:
我是 Python 编程的新手。从 4 位数字列表中找到最常见的渐进数字的有效且 Pyhtonic 方法是什么?
假设我有以下列表:[6111, 7111, 6112, 6121, 6115, 6123]。
逻辑是观察第一个数字 6 是最常见的。我可以删除数字 7111 以供下一个考虑。
对于第二个数字,我考虑了新的候选者[6111, 6112, 6121, 6115, 6123],我观察到 1 是最常见的数字,依此类推。
在算法结束时,我将只剩下列表中的 1 个数字。
如果有 2 个或更多数字出现相同的数字,我可以在所有数字之间随机选择较小的一个。
一种简单的方法是将列表转换为 Nx4 矩阵,并为每一列考虑最常见的数字。这可以工作,但我找到了一种非常愚蠢和低效的方法来解决这个问题。有人可以帮忙吗?
编辑:此解决方案的代码(注意:此代码并不总是有效,有些地方是错误的。有关此问题的解决方案,请参阅@MadPhysicist ANSWER)
import numpy as np
import pandas as pd
from collections import Counter
numbers_list = [6111, 7111, 6112, 6121, 6115, 6123]
my_list = []
for number in numbers_list:
digit_list = []
for c in str(number):
digit_list.append(c)
my_list.append(digit_list)
matrix = np.array(my_list)
matrix0 = matrix
my_counter = Counter(matrix.T[0]).most_common(1)
i=0
for digit0 in matrix.T[0]:
if digit0 != my_counter[0][0]:
matrix0 = np.delete(matrix, i, 0)
i += 1
matrix = matrix0
matrix1 = matrix
my_counter = Counter(matrix.T[1]).most_common(1)
i=0
for digit1 in matrix.T[1]:
if digit1 != my_counter[0][0]:
matrix1 = np.delete(matrix, i, 0)
i += 1
matrix = matrix1
matrix2 = matrix
my_counter = Counter(matrix.T[2]).most_common(1)
i=0
for digit2 in matrix.T[2]:
if digit2 != my_counter[0][0]:
matrix2 = np.delete(matrix, i, 0)
i += 1
matrix = matrix2
matrix3 = matrix
my_counter = Counter(matrix.T[3]).most_common(1)
i=0
for digit3 in matrix.T[3]:
if digit3 != my_counter[0][0]:
matrix3 = np.delete(matrix, i, 0)
i += 1
matrix = matrix3
print (matrix[0])
【问题讨论】:
-
展示愚蠢的方式。你是新来的。你的方法可能没有你想象的那么愚蠢,特别是如果它有效:)
-
我赞同上面的评论。恐怕如果我想出一个解决方案,它比你的更愚蠢 :-)。
-
@MadPhysicist 我发布了我在写这篇文章时想到的解决方案。它根本不是 Pythonic,但它可以工作
-
@QuangHoang 也可以看看
-
我取消了我的投票并删除了我的近距离投票。如果你喜欢我的回答,请告诉我。
标签: python python-3.x numpy frequency