在Python列表中生成在同一索引中不重复的随机值

2024-09-19 23:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个程序,我需要生成一个列表中的随机值。用户被要求输入他们想要在二维网格上生成多少个随机值(箱子-用字母“T”表示)。问题是,当用户键入“8”作为他们想要生成的随机“箱子”的数量时,有时只有5或6个箱子被生成到网格中(可能是因为随机整数重复到网格中,并且不在网格中的唯一点进行索引)。箱子的数量从来没有精确地表示到网格中。如何确保将所有随机值分配给二维网格上的唯一索引?你知道吗

    def chests():
        global chest
        chest = int(input("How many chests would you like in the game?"))
        for i in range(0,chest):
            board[randint(0, 4)][randint(0, 4)] = "T"


        return board

Tags: 用户in程序board网格列表数量键入
1条回答
网友
1楼 · 发布于 2024-09-19 23:32:57

在我看来,您需要生成所有可能的索引,然后随机选择一个“总体”:

import itertools
import random
chest_count = 8
BOARD_SIZE = 4
indices = list(itertools.product(range(BOARD_SIZE), repeat=2))
chest_locations = random.sample(indices, chest_count)
for i, j in chest_locations:
     board[i][j] = 'T'

结果是O(BOARD_SIZE^2)更复杂的方法,例如,不需要生成整个董事会的指数,您可以对扁平董事会的总体进行抽样,然后生成指数:

locations = random.sample(range(BOARD_SIZE * BOARD_SIZE), chest_count)  # xrange on python2.x
for location in locations:
    j, i = divmod(location, BOARD_SIZE)
    board[i][j] = 'T'

结果是O(chest_count)这可能比电路板的大小小得多,但是,我怀疑你的电路板是否足够大以至于有意义:-)。你知道吗

相关问题 更多 >