Python-计算相同长度列表中最频繁的元素

Python-计算相同长度列表中最频繁的元素,python,string,frequency,Python,String,Frequency,在过去的几个小时里,我一直在寻找这个问题的答案,但没有找到我想要的答案,所以我决定在这里提问 假设我有一个长度相同的数据列表,比如 0004000000350 0000090033313 0004000604363 040006203330b 0004000300a3a 0004000403833 00000300333a9 0004000003a30 匹配每个位置中出现最多的字符的最有效方法是什么 示例输出如下: 0 0 0 4 0 0 0 0 0 3 3 3 3 编辑:谢谢你的回答,给了

在过去的几个小时里,我一直在寻找这个问题的答案,但没有找到我想要的答案,所以我决定在这里提问

假设我有一个长度相同的数据列表,比如

0004000000350
0000090033313
0004000604363
040006203330b
0004000300a3a
0004000403833
00000300333a9
0004000003a30
匹配每个位置中出现最多的字符的最有效方法是什么

示例输出如下:

0 0 0 4 0 0 0 0 0 3 3 3 3


编辑:谢谢你的回答,给了我想要的东西!:)




编辑2:我想我会补充这个问题,因为这可能是最简单的解决方法。有了这些建议的答案,您将如何添加总计数,以及某种百分比?由于它是一组大数据,最常见的情况本身并不像我希望的那样清楚。

您开始使用
zip
来交错每个字符串中处于相同相对位置的字符。然后使用每个元组的模式,并连接生成器表达式中的结果字符串:

l = ['0004000000350', '0000090033313', '0004000604363', '040006203330b', 
     '0004000300a3a', '0004000403833', '00000300333a9', '0004000003a30']

from scipy.stats import mode
''.join(mode(i).mode[0] for i in list(zip(*l)))
输出


其中
l
是字符串列表。

压缩字符串列表以“转置”它们以在同一迭代器中显示列,应用
集合。对它们进行计数,并使用
最常用的
方法,删除不需要的数据

data="""0004000000350
0000090033313
0004000604363
040006203330b
0004000300a3a
0004000403833
00000300333a9
0004000003a30"""

import collections

counts = [collections.Counter(x).most_common(1)[0][0] for x in zip(*data.splitlines())]
这将产生:

['0', '0', '0', '4', '0', '0', '0', '0', '0', '3', '3', '3', '3']

(如果需要,请使用
“”,连接字符以重新创建字符串。连接(计数)

如果不导入,我将执行以下操作:

data = [
"0004000000350",
"0000090033313",
"0004000604363",
"040006203330b",
"0004000300a3a",
"0004000403833",
"00000300333a9",
"0004000003a30",
]

# return the most common elemebt in an iterable
most_common = lambda ite: max(ite, key=ite.count)  

# print the most_common in each columns
print(map(most_common, zip(*data)))

# ['0', '0', '0', '4', '0', '0', '0', '0', '0', '3', '3', '3', '3']

因为没有人使用过熊猫,所以通过使用
pandas
您可以轻松高效地实现这一点

a = """0004000000350
0000090033313
0004000604363
040006203330b
0004000300a3a
0004000403833
00000300333a9
0004000003a30"""

import pandas as pd
df = pd.DataFrame([list(j) for j in a.strip().split('\n')])
result =  df.mode().to_string(header=None,index=None)
print(result)

""" output 
 0  0  0  4  0  0  0  0  0  3  3  3  3
"""

为什么预期输出的第四个元素是4而不是0?在示例数据集中,位置4中最常见的字符是4。4有5次出现,而0有3次。
预期的str实例,tuple found
缺少
[0]
?可能值得注意的是,
键的
max
是O(n²)。
data = [
"0004000000350",
"0000090033313",
"0004000604363",
"040006203330b",
"0004000300a3a",
"0004000403833",
"00000300333a9",
"0004000003a30",
]

# return the most common elemebt in an iterable
most_common = lambda ite: max(ite, key=ite.count)  

# print the most_common in each columns
print(map(most_common, zip(*data)))

# ['0', '0', '0', '4', '0', '0', '0', '0', '0', '3', '3', '3', '3']
a = """0004000000350
0000090033313
0004000604363
040006203330b
0004000300a3a
0004000403833
00000300333a9
0004000003a30"""

import pandas as pd
df = pd.DataFrame([list(j) for j in a.strip().split('\n')])
result =  df.mode().to_string(header=None,index=None)
print(result)

""" output 
 0  0  0  4  0  0  0  0  0  3  3  3  3
"""