Python 创建一个范围内整数的随机列表,并在列表中查找平均值、最小值和最大值

Python 创建一个范围内整数的随机列表,并在列表中查找平均值、最小值和最大值,python,python-3.x,list,integer,Python,Python 3.x,List,Integer,我对编码还不熟悉,但仍在努力学习python编码。 我正试图写一个程序,生成5个随机数并存储在一个列表中。我的输出结果应该是这样的:[2,34,23,5,22] 我试图从列表中找出平均数、最低数和最高数。我尝试了其他几种方法来寻找答案,但我得到了列表中的最后一个数字,即我的最高、最低和平均数。有人能帮我解决这个问题吗 import random def main(): num = [] for n in range(5): num = [(random.rand

我对编码还不熟悉,但仍在努力学习python编码。 我正试图写一个程序,生成5个随机数并存储在一个列表中。我的输出结果应该是这样的:[2,34,23,5,22]

我试图从列表中找出平均数、最低数和最高数。我尝试了其他几种方法来寻找答案,但我得到了列表中的最后一个数字,即我的最高、最低和平均数。有人能帮我解决这个问题吗

import random

def main():
    num = []
    for n in range(5):
        num = [(random.randint(1,100))]
    print(num)

    lowest = min(num)
    print("The lowest number is: ", lowest)

    highest = max(num)
    print("The highest number is: ", highest)

    total = 0.0
    for value in num:
        total += value

    average = total / len(num)
    print("The average is: " , average)


main()

您的问题在于
num
的定义。按照以下列表定义
num
,并且脚本可以正常工作:

num = [random.randint(1,100) for _ in range(5)]
定义失败的原因是
num=[(random.randint(1100))]
只创建了一个整数列表。如果希望在循环中执行此操作,可以按如下方式执行:

for n in range(5):
    num.append(random.randint(1,100))

但是,python习惯用法是使用前面提到的列表理解。

您的问题在于
num
的定义。按照以下列表定义
num
,并且脚本可以正常工作:

num = [random.randint(1,100) for _ in range(5)]
定义失败的原因是
num=[(random.randint(1100))]
只创建了一个整数列表。如果希望在循环中执行此操作,可以按如下方式执行:

for n in range(5):
    num.append(random.randint(1,100))
但是,python习惯用法是使用前面提到的列表理解。

您可以使用列表理解获取随机列表,如下所示:

在这里,
random.randint(range\u start,range\u end)
将返回一个介于
range\u start
range\u end
之间的随机整数,在本例中分别为
1
100
。例如,我的列表如下:

>>> rand_list
[18, 18, 2, 3, 0]
要查找平均值,请执行以下操作:

>>> sum(rand_list)/(len(rand_list)*1.0)
8.2                           #    ^ Needed in Python 2.x because
                              #      division of two `int` returns a integer value
                              #      in Python 2.x . Not needed in Python 3.x   
要查找最大值,请使用列表中的:

>>> max(rand_list)
18
>>> min(rand_list)
0
要查找最小值,请使用列表中的:

>>> max(rand_list)
18
>>> min(rand_list)
0
您可以使用列表理解获取随机列表,如下所示:

在这里,
random.randint(range\u start,range\u end)
将返回一个介于
range\u start
range\u end
之间的随机整数,在本例中分别为
1
100
。例如,我的列表如下:

>>> rand_list
[18, 18, 2, 3, 0]
要查找平均值,请执行以下操作:

>>> sum(rand_list)/(len(rand_list)*1.0)
8.2                           #    ^ Needed in Python 2.x because
                              #      division of two `int` returns a integer value
                              #      in Python 2.x . Not needed in Python 3.x   
要查找最大值,请使用列表中的:

>>> max(rand_list)
18
>>> min(rand_list)
0
要查找最小值,请使用列表中的:

>>> max(rand_list)
18
>>> min(rand_list)
0
对于每个n,您将用只包含
random.randint(1100)
的列表替换整个
num
列表


对于每个n,您将整个
num
列表替换为仅包含
random.randint(1100)

的列表。请注意,当您
print(num)
时,其中只有一个值
num=[(random.randint(1100))]
正在替换现有列表及其任何值。请注意,当您
print(num)
时,其中只有一个值
num=[(random.randint(1100))]
正在替换现有列表和其中的任何值。我一直在做一些测试,因为我不知道这种方法是否比只使用循环或甚至减少列表更有效。似乎这三个都返回了奇怪的结果,其中一个更快,有时其他的执行,所有的数字几乎相同。因此,由于这是分拣机代码,并且更容易重新编码,因此应该这样做:D@Netwave您应该使用模块来衡量性能。据我所知,这些是实现各自任务的最佳(最高效的)方法。是的,我知道我应该使用timeit,无论哪种方法,对每个任务来说都是最有效的,但对我来说,只迭代一次并执行操作应该更有效……但在我做一些测试时不是,或者至少不是,因为我不知道这种方法是否比只使用循环或甚至减少列表更有效。似乎这三个都返回了奇怪的结果,其中一个更快,有时其他的执行,所有的数字几乎相同。因此,由于这是分拣机代码,并且更容易重新编码,因此应该这样做:D@Netwave您应该使用模块来衡量性能。据我所知,这些是实现各自任务的最佳(最有效的)方法。是的,我知道我应该使用timeit,无论哪种方法,它们对每个任务都是最有效的,但对我来说,只迭代一次并执行操作应该更有效……但在我尝试时不是或至少不是这样