Python 创建一个范围内整数的随机列表,并在列表中查找平均值、最小值和最大值
我对编码还不熟悉,但仍在努力学习python编码。 我正试图写一个程序,生成5个随机数并存储在一个列表中。我的输出结果应该是这样的:[2,34,23,5,22] 我试图从列表中找出平均数、最低数和最高数。我尝试了其他几种方法来寻找答案,但我得到了列表中的最后一个数字,即我的最高、最低和平均数。有人能帮我解决这个问题吗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
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,无论哪种方法,它们对每个任务都是最有效的,但对我来说,只迭代一次并执行操作应该更有效……但在我尝试时不是或至少不是这样