Python将范围内的随机整数追加到列表中,计算数字出现的次数
因此,我有以下代码:Python将范围内的随机整数追加到列表中,计算数字出现的次数,python,random,Python,Random,因此,我有以下代码: 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) 现在我需要能够计算每个数字出现在列表中的次数。 我试过计数器和其他各种东西,仍然会出错,我被卡住了。 任何帮助都将不胜感激。如果我正确理解您的
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)
现在我需要能够计算每个数字出现在列表中的次数。
我试过计数器和其他各种东西,仍然会出错,我被卡住了。
任何帮助都将不胜感激。如果我正确理解您的问题,您可以创建另一个包含所有可能数字长度的列表,现在每次添加该数字时,您都会将1添加到his相应的索引中 ,说:
现在,coubt_列表中的每个索引都代表一个数字,在其内部出现的数字您可以添加一个列表,其中包含与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))
您可以在列表中存储每个子列表的计数器,然后对所有这些计数器求和 我假设您需要所有子列表中每个数字的计数
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, ...})
最简单的方法是使用dictionary
.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
您可以使用numpy中的函数:
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))
注意:我缩小了您的列表,只是为了使打印输出可读,但只需根据您的意愿进行调整。为什么要制作子列表?因为我希望它位于6块中。所以基本上它以6,x的次数生成整数。之后,我希望能够计算每个数字的发生次数。请显示您的预期输出。你想要每个子列表都有一个计数器吗?我只想要发生的数量。我猜子列表不是一个好主意?它是否是一个好主意取决于您实际想要实现的目标,这就是为什么我要求您的预期输出在尝试代码时得到一个TypeError:TypeError:列表索引必须是整数或切片,而不是listYou's right,我忘了添加每个子数组的y索引。编辑了他的作品!谢谢,我已经坚持了好几天了(尽管这可能与我试图学习python有关)^.^@MatthiasDeVos很乐意帮忙。仅供参考:。在
L
中附加并清空子列表,然后在for循环中通过索引搜索它6次以附加它,这不是很有效。@DušanMaďar我真的不知道你在说什么。我不是在编索引anything@DušanMaďar OP就是这样设置循环的,我只是在循环中放置了一个计数器。字典搜索和列表索引都是O(1),我的意思是L[x].append(num)
@DušanMaďar。。。那是他们的密码。它仍然是O(1),没有搜索。你测试过吗…?事实上,好的,它测试过了,你出于某种原因决定更改样本我更改了列表大小,只是为了便于阅读和验证打印结果:)
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))