随机数生成器,不可散列的类型“列表”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机数生成器,不可散列的类型“列表”相关的知识,希望对你有一定的参考价值。

我下面代码的目标是从随机数中提取10个数字。然后打印出大多数经常出现的数据(模式/方式)。

这是我尝试过的

i=0
a=0
import random
from time import sleep
import statistics
var1=input ("min random : ")
var2=input ("max random : ")
bb=int(var1)
ba=int(var2)
data = [[]for z in range(10)]
while i<10:
    rundum=random.randint(bb,ba)
    print(rundum)
    data[a].append(rundum)
    sleep(0.2)
    i=i+1
    a=a+1
tuple(data)
statistics.mode(data)
print(data)

这是结果

min random : 1
max random : 10
2
5
9
1
10
7
1
6
9
9
[[2], [5], [9], [1], [10], [7], [1], [6], [9], [9]]
Traceback (most recent call last):
  File "C:UsersEzDocumentselajar random.py", line 20, in <module>
    statistics.mode(data)
  File "C:Program Files (x86)Thonnylibstatistics.py", line 501, in mode
    table = _counts(data)
  File "C:Program Files (x86)Thonnylibstatistics.py", line 252, in _counts
    table = collections.Counter(iter(data)).most_common()
  File "C:Program Files (x86)Thonnylibcollections\__init__.py", line 568, in __init__
    self.update(*args, **kwds)
  File "C:Program Files (x86)Thonnylibcollections\__init__.py", line 655, in update
    _count_elements(self, iterable)
TypeError: unhashable type: 'list'
>>> 

我不知道如何解决此问题预先感谢。

答案

您可以使用此:

import random
import statistics
from time import sleep

bb = int(input("min random : "))
ba = int(input("max random : "))

data = []
for i in range(10):
    r = random.randint(bb, ba)
    data.append(r)
    sleep(0.2)

mode = statistics.mode(data)
print(data)
print("Mode: ", mode)

样本结果:

[9, 7, 8, 4, 5, 8, 2, 3, 10, 6]
Mode:  8
另一答案

为什么要这样声明data?它应该只是data = [],然后在for循环中,您只需要追加到数据即可:

i=0
a=0
import random
from time import sleep
import statistics
var1=input ("min random : ")
var2=input ("max random : ")
bb=int(var1)
ba=int(var2)
data = []
while i<10:
    rundum=random.randint(bb,ba)
    print(rundum)
    data.append(rundum)
    sleep(0.2)
    i=i+1
    a=a+1

data = tuple(data)
print(data)
print(statistics.mode(data))
print(data)

结果:

(10, 7, 6, 3, 5, 5, 4, 1, 6, 5)
5
另一答案

尝试此代码并声明一个空列表,请分配data = [],每当需要将数据添加到列表时,都可以使用插入append方法。

import random
import statistics
from time import sleep

i=0
a=0

var1=input ("min random : ")
var2=input ("max random : ")
bb=int(var1)
ba=int(var2)
data = []
while i<10:
    rundum=random.randint(bb,ba)
    print(rundum)
    data.append(rundum)
    sleep(0.2)
    i=i+1
    a=a+1

print("Mode of given data set is {}".format(statistics.mode(data)))

以上是关于随机数生成器,不可散列的类型“列表”的主要内容,如果未能解决你的问题,请参考以下文章

Python字典:TypeError:不可散列的类型:'list'

nltk 的朴素基分类器给出不可散列的类型错误

Python - 重复数据删除问题:TypeError:不可散列的类型:'numpy.ndarray'

多标签计算类权重 - 不可散列的类型

如何在其上制作一个简单的 Django URLconf 和 reverse() 进行测试? (获取TypeError:不可散列的类型:'list')

TypeError:使用一组 UDT 创建 Cassandra Python 驱动程序模型时不可散列的类型 UserType