在列表中找到最小值

时间:2013-09-10 20:20:35

标签: python

这里非常简单的程序。我正在尝试取一个正整数n,生成一个介于100和500之间的n个随机数的列表,并返回列表中显示的最小值

import random
def randomNumber2(n):
    mylist2 = []
    needMoreNumbers2 = True
    while (needMoreNumbers2):
        randomNumber2 = int(random.random() * 500)
        myList2.append(randomNumber2)
        n >= n - 100
        if (n <= 500):
            needMoreNumbers2 = false
    return myList2

有人可以指导我朝着我需要的方向前进吗?

3 个答案:

答案 0 :(得分:6)

import random

def randomNumber2(n):
    return min(random.randint(100, 500) for _ in range(n))

答案 1 :(得分:4)

如果你想要更接近你的程序,你需要先在你的程序中修复一些东西 - 它根本不运行。 Python区分大小写,因此mylist2myList2不同。在整个过程中使用相同的拼写。同样,false不是Python内置的 - False是。

解决这些问题,我们得到:

import random

def randomNumber2(n):
    myList2 = []
    needMoreNumbers2 = True
    while (needMoreNumbers2):
        randomNumber2 = int(random.random() * 500)
        myList2.append(randomNumber2)
        n >= n - 100
        if (n <= 500):
            needMoreNumbers2 = False
    return myList2

现在无论n传递了什么,只要n是&lt; = 500就返回一个包含单个随机整数的列表,在0到499(含)之内。如果n是&gt; 500,它永远运行(无限循环)。你能明白为什么吗?如果原始if (n <= 500)是&lt; = 500,则n始终为true,否则始终为false。您的n >= n - 100没有做任何可见的事情(它只是将nn - 100进行比较,并且始终返回true,这将被忽略)。

所以请听取建议,将转向更合理的Python习语。这是一种应该更容易理解的方式:

import random

def randomNumber2(n):
    myList2 = []
    while len(myList2) < n:
        randomNumber2 = int(random.random() * 500)
        myList2.append(randomNumber2)
    return myList2

进度;-)现在我们至少回到一个带有n个随机整数的列表。但是,它们不在您想要的范围内:int(random.random() * 500)返回0到499(包括0和499)范围内的int。如果您希望它们介于100和500之间,那么最好的方法是random.randint(100, 500),就像其他人已经向您展示的那样。 100 + int(random.random() * 400)是一种与原始代码更接近的等效方式,所以让我们试试:

import random

def randomNumber2(n):
    myList2 = []
    while len(myList2) < n:
        randomNumber2 = 100 + int(random.random() * 400)
        myList2.append(randomNumber2)
    return myList2

为了达到最低限度,最后只做min(myList2)是最好的。这不仅是正确的,而且比你自己编码的任何东西都要快。如果你想自己做,这是一种方式:

import random

def randomNumber2(n):
    myList2 = []
    smallest = None
    while len(myList2) < n:
        randomNumber2 = 100 + int(random.random() * 400)
        myList2.append(randomNumber2)
        if smallest is None or randomNumber2 < smallest:
            smallest = randomNumber2
    assert smallest == min(myList2)
    return myList2

F J的答案是最有经验的Pythonistas会如何编码它。

答案 2 :(得分:1)

  

我正在尝试取一个正整数n,生成一个介于100和500之间的n个随机数的列表,并返回列表中显示的最小值

然后,你不需要列表,你只需要返回n中产生的最小随机数“抛出”

import random

def smallrand(n,rangemin=100,rangemax=500):
    smallest = float('+inf')
    for _ in xrange(n):
       new = random.randint(rangemin, rangemax)
       if new < smallest: smallest = new
    return smallest