我正在为学校做一个小项目,我必须将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:
答案 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)]