簡體   English   中英

Python將范圍內的隨機整數附加到列表中,計算數字的出現次數

[英]Python appending random int in range to list, count number of occurences of numbers

所以我有以下代碼:

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和其他各種方法,但仍然出現錯誤,我被卡住了。 任何幫助,將不勝感激。

您可以將每個子列表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,例如:

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中的每個索引都代表一個數字,而在他內部,出現的數字

您可以添加一個包含與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))

最簡單的方法是使用字典.get()方法增加值(如果以前已看到過這些值.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))

注意:我使列表變小了,以使打印輸出易於閱讀,但可以根據需要進行調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM