使用一个函数生成多个列表

时间:2016-01-21 18:33:16

标签: python list

我正在为学校做一个小项目,我必须将quicksort与python的内置排序功能进行比较。我实际上已经陷入困境,我必须用数字填充多个列表。

def genlist():
    x = []
    while len(x) < 100
        y = randint(1,9999)
        x += [y]
    return x

这是我的代码。此代码有效,但它只创建一个列表。但是我的目标是创建具有不同长度的多个列表。

尝试过类似的事情:

def genlist():
    x,y,z = []
    while len(x,y,z) < 100, 1000, 10
        y = randint(1,9999)
        x += [y]
    return x

但显然不起作用D:

3 个答案:

答案 0 :(得分:3)

我认为这就是你想要的,一个可以生成各种长度的随机列表的函数:

import random


def main():
    print(generate_list(100))
    print(generate_list(1000))
    print(generate_list(10))


def generate_list(length):
    return [random.randrange(10000) for _ in range(length)]

if __name__ == '__main__':
    main()

使用您要创建的列表的长度调用generate_list并使用返回的结果。

答案 1 :(得分:2)

我知道这是一个老问题,但我想我有更好的答案。

Noctis Skytower的答案需要__main__函数中的其他打印行才能获得所需的列表数量。在我的解决方案中,所需列表的数量是函数的参数。

我遇到过这个,因为今天我有完全相同的问题。我只是在短时间内学习Python,但我已经破解了一个解决方案。

用户可以给出数字和长度作为参数。输出是一个列表列表。

import random


def create_multiple_lists(number, length):
    lists_master = []
    for i in range(number):
        sub_list = []
        for j in range(length):
            sub_list.append(random.randint(0, 1000))
        lists_master.append(sub_list)
    print(lists_master)


create_multiple_lists(20, 10)

答案 2 :(得分:1)

您已经关闭了 - 您可以对现有代码进行一些更改,以获得您想要的内容:

def genlist():
    x = []
    limit = randint(50, 200)
    while len(x) < limit:
        y = randint(1,9999)
        x.append(y)  # Use the .append() function is more common
    return x

这将为您提供随机数在50到200之间的随机数列表。

正如Noctis指出的那样,Python中有一些功能可以减少你必须编写的代码量。当你变得更熟悉时,它也更容易阅读。

我们可以做的第一件事就是将while循环更改为for循环。每当你事先知道你想要多少东西时,for循环就可以了。

def genlist():
    x = []
    for _ in range(randint(50, 200)):  # use xrange if you're on Python2
        y = randint(1,9999)
        x.append(y)  # Use the .append() function is more common
    return x

我们可以做的下一个更改是list comprehension。这基本上只需要构成循环的所有代码并将其阻塞在[]内。 Here is a great visual guide to list comps

def genlist():
    x = [randint(1, 9999) for _ in range(randint(50, 200))]
    return x

你可以通过返回列表理解而不是将其分配给变量来减少它:

def genlist():
    return [randint(1, 9999) for _ in range(randint(50, 200))]

如果您愿意,可以参数化您的功能,以便调用者可以自定义输出 - 为了使事情变得更好,您可以为它们提供默认参数,以便默认情况下获取当前行为,除非他们想要覆盖它: / p>

def genlist(randmin=1, randmax=9999, minsize=50, maxsize=200):
    return [randint(randmin, randmax) for _ in range(randint(minsize, maxsize)]