import random
fruits = ['Apple','Mango','Banana','Grapes','Guava']
random.seed(500)
low =0
high = len(fruits)
random_fruits = [fruits[random.randint(low,high)] for i in range(1000)]
这是我的代码,以下是我得到的错误?
IndexError:列表索引超出范围
答案 0 :(得分:3)
函数random.randint
会在由下限值和上限值所定义的范围内生成一个随机数,两者均包括:low <= x <= high
。由于将high
设置为len(fruits)
,并且最后一个列表索引实际上是len(fruits) - 1
,因此如果random.randint
产生高值,则可以获得超出范围错误的列表索引。
相反,可以通过更改high
的定义来修改代码。
import random
fruits = ['Apple','Mango','Banana','Grapes','Guava']
random.seed(500)
low = 0
high = len(fruits) - 1
random_fruits = [fruits[random.randint(low,high)] for i in range(1000)]
答案 1 :(得分:0)
您正在调用一个函数1000次以获取1000个值。对于python-3,您可以使用random.choices(iterable, k=nubmer of elements)
来简化代码。
一个呼叫将为您提供来自源可迭代的1000个随机项目的列表:
import random
fruits = ['Apple','Mango','Banana','Grapes','Guava']
random.seed(500)
# reduced 1000 to 10 for output-brievity
random_fruits = random.choices(fruits,k=10) # no need to get 1000 times one element, get
# 1000 back in one call is more efficient.
print(random_fruits)
哪个输出为:
['Grapes', 'Guava', 'Banana', 'Mango', 'Grapes', 'Mango', 'Guava', 'Mango', 'Banana', 'Grapes']
您给它提供了一个可迭代的计数,并以list
的形式获得了随机绘制的随机绘制的结果。
时间:
import timeit
s = """import random
random.seed(500)
fruits=['Apple','Mango','Banana','Grapes','Guava']"""
timeit.timeit("k = [fruits[random.randint(0,4)] for _ in range(1000)]",
setup = s , number=100)
0.11539360368355066
vs。
timeit.timeit("k = random.choices(fruits, k=1000)",
setup = s, number=100)
0.02338418321748037
这使random.choices(...)
的使用速度提高了约5倍。