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
"""