Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将范围内的随机整数追加到列表中,计算数字出现的次数_Python_Random - Fatal编程技术网

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