根据 Python 中的分数生成随机元组组合

Generate random tuple combination based on their score in Python

我正在尝试创建一个 python 程序,我有 4 个元组列表,我想创建不同的 'words',每个字母都有自己的出现概率,我也想单词要独一无二。

我首先尝试通过为每个字母分配概率来创建,这使用 numpy.random.choice() 函数起作用。

现在我想换个角度看问题。我给每个字母(每个元组的第二部分)加上一个权重(或分数),所以我创建的每个单词都有一个分数,在这里:从 4 到 16。(见下面的 4 个元组列表,这是我的一个例子使用,4 个列表不同)

liste1 = [('A',1), ('E',1), ('I',1), ('O',1), ('U',1), ('M',2), ('N',2), ('B',2), ('Y',2), ('R',3), ('E',3), ('T',3), ('G',4), ('J',4)]

liste2 = [('A',1), ('E',1), ('I',1), ('O',1), ('U',1), ('L',2), ('N',2), ('Z',2), ('Y',2), ('R',3), ('E',3), ('P',3), ('F',4), ('X',4)]

liste3 = [('A',1), ('E',1), ('I',1), ('O',1), ('U',1), ('Q',2), ('N',2), ('B',2), ('Y',2), ('R',3), ('E',3), ('T',3), ('H',4), ('J',4)]

liste4 = [('A',1), ('E',1), ('I',1), ('O',1), ('U',1), ('M',2), ('N',2), ('B',2), ('Y',2), ('R',3), ('E',3), ('T',3), ('S',4), ('J',4)]

我想做的是告诉我的程序我想要 x 个分数为 16 的单词,然后程序将随机创建 x 个具有这个分数的唯一单词,然后也为分数为15、14 等...

我不知道该怎么做,我知道这是一个非常具体的需求,所以如果有人能给我一个答案,我会很高兴。

感谢您的宝贵时间!

嗨,我从上面的代码中了解到答案可能是这样的 ,你可以在每个列表上有一个循环 运行 并且 if 语句将检查条件这里是一个例子

list1 = [("a",1),("b",2)....,("z",  16)]
wordlist = [] 
for tuple_1 in list1:
    (word,score) = tuple_1.split(",")
    if score == userinput #you can define that :
        wordlist.append(word)
    else:
        pass
# do random.choice() here

注意如有错误请告知

尝试:

import random

liste1 = [
    ("A", 1),
    ("E", 1),
    ("I", 1),
    ("O", 1),
    ("U", 1),
    ("M", 2),
    ("N", 2),
    ("B", 2),
    ("Y", 2),
    ("R", 3),
    ("E", 3),
    ("T", 3),
    ("G", 4),
    ("J", 4),
]


def get_words(lst, n, target):
    def get_combinations(candidates):
        res = []

        def fn(arr, start):
            s = sum(arr)

            if s == target:
                res.append(arr[:])
                return
            if s > target:
                return

            for i in range(start, len(candidates)):
                arr.append(candidates[i])
                fn(arr, i)
                arr.pop()

        fn([], 0)
        return res

    tmp = {}
    for ch, v in lst:
        tmp.setdefault(v, []).append(ch)

    all_comb = get_combinations(list(tmp))

    res = []
    for _ in range(n):
        while True:
            s = ""
            comb = random.choice(all_comb)
            random.shuffle(comb)
            for v in comb:
                s += random.choice(tmp[v])
            if s not in res:
                res.append(s)
                break

    return res


print(get_words(liste1, 10, 16))

这会从 liste1 中打印出 10 个随机单词,这些单词的字符总和为 16(例如):

[
    "UNINONMBAM",
    "TMYRNYY",
    "UOUUAEOUUUIAEOAA",
    "JIJMJA",
    "MNNJJN",
    "OIMAIIGOJ",
    "TTNBYMY",
    "EIAAIUUAMIEOI",
    "IEUAOJENUU",
    "BBGJENI",
]