Python:如何防止随机选择的键/值对重复

2024-10-02 12:38:25 发布

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

def fill2_line1():
    x2 = random.choice(list(twoSyllValues.items()))
    line1.append(x2)

magicList = ([x[1] for x in line1])
            
if 1 in magicList:
    fill2_line1()
    fill2_line1()
    complete_line = line1[0][0] + " " + line1[1][0] + " " + 
    line1[2][0]
    print(complete_line)

这是有问题的部分-整个程序超过150行。它的工作原理是完美的,但有时我会得到重复的单词。为了优化代码,我希望确保第一个随机元组选择中的键不会在该列表中的下两个选定元组line1中重复。我能想到的唯一方法是在第一个单词选择之后创建另一个字典,然后从新字典中排除该键、值对,然后进行接下来的两个random.choice调用。我觉得必须有一个更简单的方法,但我只是还没有经验


Tags: 方法in字典deflinerandom单词list
1条回答
网友
1楼 · 发布于 2024-10-02 12:38:25

我可以想出三种方法来解决你面临的问题。我将写一个示例代码,你可以参考,因为我不知道你的全部代码

  1. 在第二次random.choice调用之前删除该键,并在需要时将其添加回。这有点类似于创建另一个字典,但效率更高
def fill2_line1():
    x2 = random.choice(list(twoSyllValues.items()))
    line1.append(x2)
    return x2

magicList = ([x[1] for x in line1])
            
if 1 in magicList:
    deleted_list = []
    # run first random.choice
    deleted_item = fill2_line1()
    deleted_list.append(deleted_item)
    del twoSyllValues[deleted_item[0]]
    # run second random.choice
    deleted_item = fill2_line1()
    deleted_list.append(deleted_item)
    del twoSyllValues[deleted_item[0]]
    complete_line = line1[0][0] + " " + line1[1][0] + " " 
                    + line1[2][0]
    print(complete_line)
    # add the deleted items back in after work is done
    for k, v in deleted_list:
        twoSyllValues[k] = v
  1. 运行random.choice直到没有重复项
def fill2_line1(deleted_set):
    x2 = random.choice(list(twoSyllValues.items()))
    while x2 not in deleted_set:
        x2 = random.choice(list(twoSyllValues.items()))
    line1.append(x2)
    deleted_set.add(x2)

magicList = ([x[1] for x in line1])
            
if 1 in magicList:
    deleted_set = set([])
    fill2_line1(deleted_set)
    fill2_line1(deleted_set)
    complete_line = line1[0][0] + " " + line1[1][0] + " " 
                    + line1[2][0]
    print(complete_line)
  1. 保留另一个列表供随机选择
def fill2_line1(items_list):
    x2 = random.choice(items_list)
    line1.append(x2)
    items_list.remove(x2)

magicList = ([x[1] for x in line1])
            
if 1 in magicList:
    items_list = list(twoSyllValues.items())
    fill2_line1(items_list)
    fill2_line1(items_list)
    complete_line = line1[0][0] + " " + line1[1][0] + " " 
                    + line1[2][0]
    print(complete_line)

希望我的回答能给你一些想法

相关问题 更多 >

    热门问题