列表中的随机数重复

1 投票
3 回答
1672 浏览
提问于 2025-04-18 05:28

我正在尝试写一段代码,因为我还是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_numbersrepetition 的功能都有说明。repeater 会生成 n 个随机数的列表。对于每个列表,它会找到第一个重复数字的索引,并把所有这些索引存储在一个列表中,然后返回这个列表。最后,根据我的理解,你想要在返回的 repeater 列表中查看第一个重复数字的索引,也就是说,想知道在多少次尝试后,同一个随机数会在同一个位置被生成两次。

如果我理解错了你的问题,我非常抱歉。

撰写回答