在lis中查找最小值

2024-09-29 23:25:37 发布

您现在位置: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

有人能帮我指点方向吗?在


Tags: import程序true列表ifdefrandomint
3条回答

如果你想让程序更接近你的程序,你需要先修复程序中的一些问题——它根本就不运行。Python区分大小写,因此mylist2和{}是不同的。通篇使用相同的拼写。类似地,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是<;=500,它返回一个包含单个随机整数的列表,从0到499(包括0)。如果n大于500,它将永远运行(无限循环)。你知道为什么吗?^如果原始n为<;=500,则{}始终为true,否则为false。您的n >= n - 100不执行任何可见的操作(它只是将n与{}进行比较,并始终返回true,该值被忽略)。在

因此,请采纳建议,将转向更合理的Python习惯用法。以下是一种更容易理解的方法:

^{pr2}$

Progress;-)现在我们至少得到一个带有n随机整数的列表。它们不在您想要的范围内,但是:int(random.random() * 500)返回一个0到499范围内的整数(包括0到499)。如果你想让他们在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给出的答案是,最有经验的Python是如何编写代码的。在

I'm trying to take a positive integer n, generate a list of n random numbers between 100 and 500, and return the minimum value that appears in the list

然后,您不需要列表,只需要返回n“throws”中生成的随机数中最小的一个

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
import random

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

相关问题 更多 >

    热门问题