首先,我想说,我认为完全一样的问题已经回答过了,但短暂的研究之后,我无法找到导致我,我想在这里,这意味着我并没有回答任何线程挖掘不够或漏掉某些关键字。很抱歉,如果这个问题就在那里。
不管怎么说,我已经开始学习Python和正经历一些练习。我需要创建具有在其10个随机产生整数的列表和每个整数必须有一个不同的值。
所以,我试着到列表的第一个元素与下一个比较,如果它们是相同的,我试图生成if语句一个新号码。
import random
listA = []
for i in range(0,10):
x=random.randint(1,100)
if listA[i] == listA[i-1]:
x=random.randint(1,100)
else:
listA.append(x)
listA.sort()
print(listA)
但我有一个错误说; “列表索引超出范围”
我预计,如果语句启动的“0”指标和计数,直到“listA的”第九届指数,因为它去,对它们进行比较,如果相同,生成另一个随机数。但很明显,我的指数化是错误的。
此外,在代码的任何其他意见,将不胜感激。
感谢您的时间提前。
请尝试以下操作。
import random
listA = []
while(len(listA) < 10):
x = random.randint(1,100)
if x not in listA:
listA.append(x)
listA.sort()
print(listA)
说明:
让你保持生成数字,直到你想要的名单实际上是10个数字,你应该使用while循环。当循环使用,如果你碰巧产生[2,2,30,40,2,10,20,83,92,29]在随机的,您的列表将只在8号长,因为重复2的不会是补充说,虽然你已经通过你的for循环10次循环。
虽然是这里的关键是,你将永远无法骗过证明预测它会花费多少次随机有10个不同的号码,因此,你要坚持下去,而你还没有达到所需的长度。
此外,在关键字是一个简单的方法来检查,如果里面的东西别的东西已经存在。
在Python中,set
只能包含唯一值,所以在下面的代码,重复的随机数不会增加集的长度:
import random
s = set()
while len(s) < 10:
s.add(random.randint(1,100))
print(sorted(s))
输出:
[18, 20, 26, 48, 51, 72, 75, 92, 94, 99]
这可以作为sampling without replacement想到的。在这种情况下,你是“抽样”随机从range(1, 101)
10项和采样一次只能采样每个项目(即,不是“替代” - 想象随机从袋子图纸编号球理解的概念)。
无需更换抽样可以在同一行进行处理:
import random
listA = random.sample(range(1, 101), 10)
思考它的另一种方式是重新洗牌list(range(1, 101))
和采取的第一个10个元素:
import random
listA = list(range(1, 101))
random.shuffle(listA)
listA[:10]
时序的不同方法
使用%timeit
magic in iPython我们可以比较的答案中提出的不同的方法:
def random_sample():
import random
return sorted(random.sample(range(1, 101), 10))
def random_shuffle():
import random
listA = list(range(1, 101))
random.shuffle(listA)
return sorted(listA[:10])
def while_loop():
import random
listA = []
while(len(listA) < 10):
x = random.randint(1, 100)
if x not in listA:
listA.append(x)
return sorted(listA)
def random_set():
import random
s = set()
while len(s) < 10:
s.add(random.randint(1, 100))
return sorted(s)
%timeit for i in range(100): random_sample()
# 1.38 ms ± 17.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit for i in range(100): random_shuffle()
# 6.81 ms ± 104 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit for i in range(100): while_loop()
# 1.61 ms ± 18.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit for i in range(100): set_approach()
# 1.48 ms ± 19.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)