所以我有以下代码:
import random
from collections import Counter
L = []
for x in range(0, 100):
L.append([])
for y in range(0, 6):
L[x].append(random.randint(0, 45) + 1)
现在,我需要能够计算每个数字出现在列表中的次数。 我尝试了counter和其他各种方法,但仍然出现错误,我被卡住了。 任何帮助将不胜感激。
答案 0 :(得分:1)
您可以将每个子列表Counter
存储在列表中,然后对所有这些计数器求和。
我假设您想要所有子列表中的每个数字的计数。
from collections import Counter
from functools import reduce
import random
L = []
counters = []
for _ in range(0, 100):
sublist = []
for y in range(0, 6):
sublist.append(random.randint(0, 45) + 1)
counters.append(Counter(sublist))
L.append(sublist)
def counter_reducer(accumulator, next_item):
return accumulator + next_item
counts = reduce(counter_reducer, counters, Counter())
print(counts) # Counter({23: 20, 46: 19, 12: 19, ...})
答案 1 :(得分:0)
如果我对您的问题的理解正确-您可以创建一个包含所有可能数字长度的列表,现在每次在该数字后面加上数字,便会将其对应的索引加1 ,说:
count_list = [0] * 47
L = []
for x in range(0, 100):
L.append([])
for y in range(0, 6):
L[x].append(random.randint(0, 45) + 1)
count_list[L[x][y]] += 1
现在,coubt_list中的每个索引都代表一个数字,而在他体内,出现的次数
答案 2 :(得分:0)
您可以添加一个包含与L相同元素的列表,并使用count对其进行计数 试试这个:
L = []
e = []
for x in range(0, 10):
L.append([])
for y in range(0, 3):
a = random.randint(0, 45) + 1
L[x].append(a)
e.append(a)
for z in e :
print (z,e.count(z))
答案 3 :(得分:0)
最简单的方法是使用字典.get()
方法来增加值(如果以前已看到过这些值),或者以默认计数0开头。
my_count = {}
for lst in L:
for item in lst:
my_count[item] = my_count.get(item, 0) + 1
但是,由于您已经通过这种方式来创建列表,因此可以一起完成所有操作:
import random
my_count = {}
L = []
for x in range(0, 100):
L.append([])
for y in range(0, 6):
num = random.randint(0, 45) + 1
L[x].append(num)
my_count[num] = my_count.get(num, 0) + 1
答案 4 :(得分:0)
您可以使用numpy中的histogram函数:
import numpy as np
import random
from collections import Counter
L = []
ll, lu = 0, 45 # set bounds for random samples
for x in range(0, 2):
L.append([])
for y in range(0, 3):
L[x].append(random.randint(ll,lu) + 1)
bcen=np.linspace(ll, lu, lu+1) # centers
bed=np.linspace(ll-0.5, lu+0.5, lu+2) #edges
cnts, bed =np.histogram(L, bins=bed)
print('Random integers')
print(L)
print('Counts')
print(np.append(bcen.reshape(-1,1),cnts.reshape(-1,1), axis=1))
注意:我将您的列表缩小了,以使打印输出易于阅读,但可以根据需要进行调整。