列表中的随机数重复
我正在尝试写一段代码,因为我还是Python的新手,所以遇到了一些问题。这个代码应该做以下事情:
它使用randint生成一个随机数,并把这个随机数放进一个空列表l = []中,并且要一直这样做,直到达到指定的范围。
有一个叫repetition(l)的函数,它应该检查列表中的所有数字,并返回第一个重复元素的位置(索引)。
还有一个叫repeater(count)的函数,它会重复调用repetition函数,次数在1到365之间,并用一个数组来记录,直到出现重复的数字为止。
import random
l = []
for _ in range(365):
n = random.randint(1, 365)
if n not in l:
l.append(n)
print(l)
我觉得这其实就是把这些内容放在一个函数里而已:
numb = 365
def repetition(numb):
for i in range(1,numb+1):
i = random.randint(1, numb+1)
if i not in l:
l.append(n)
#def repeater(count):
用字典代替列表来实现这个功能也是可以的吗?
我在检查元素和创建repeater函数这一步卡住了。
3 个回答
0
我添加了打印语句来看看发生了什么。
import random
numb = 20
def repetition(numb):
l=[] # create a list
for i in range(1,numb+1):
i = random.randint(1, numb+1)
l.append(i) # add i to list
print l,i
if len(l) > 1 and i == l[0]: # if list is longer than one element and i == first element
return len(l) # return length of the list
repetition(numb)
[19] 19
[19, 21] 21
[19, 21, 19] 19
Out[21]: 3
0
我还不是很确定,但我觉得这个代码可以满足你的需求:
def repetition(numb):
l = [random.randint(1, numb)]
while True:
n = random.randint(1, numb)
l.append(n)
if n == l[0]:
return l
这个代码会生成一个列表,列表的第一个和最后一个值是相同的,中间夹着一些随机数字:
l = repetition(numb)
print(l)
print("Took {0} random numbers to repeat {1}".format(len(l), l[0]))
比如当 numb == 10
时的例子:
[8, 10, 5, 3, 2, 5, 8]
Took 7 random numbers to repeat 8
0
我不太明白这个问题的具体内容,但我根据我的理解写了以下内容:
import random
TRIES = 365
def generate_random_numbers(n):
"""Generates a list of n random numbers"""
random_numbers = []
for _ in range(n):
random_number = random.randint(1, n)
random_numbers.append(random_number)
return random_numbers
def repetition(random_numbers):
"""Given a list of random numbers, it will return the index of the first repeated element"""
for index, random_number in enumerate(random_numbers):
if random_number in random_numbers[:index]:
# You can print the list up to but not including the first repeated element
# using list slicing: print '{}'.format(random_numbers[:index])
return index
def repeater(n):
indices_of_first_duplicates = []
for i in range(n):
random_numbers = generate_random_numbers(n)
indices_of_first_duplicates.append(repetition(random_numbers))
return indices_of_first_duplicates
repeater_result = repeater(TRIES)
print '{}'.format(repetition(repeater_result))
在上面的代码中,genearte_random_numbers
和 repetition
的功能都有说明。repeater
会生成 n
个随机数的列表。对于每个列表,它会找到第一个重复数字的索引,并把所有这些索引存储在一个列表中,然后返回这个列表。最后,根据我的理解,你想要在返回的 repeater
列表中查看第一个重复数字的索引,也就是说,想知道在多少次尝试后,同一个随机数会在同一个位置被生成两次。
如果我理解错了你的问题,我非常抱歉。