如何使此代码更好地工作(组合列表)?

2024-09-27 21:30:38 发布

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

import random

def ordenar(inputx):
    inputx = list(inputx)
    inputx = sorted(inputx, key=int)
    return inputx

def get_numbers(totall):
    return random.sample(numeros, totall)

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]

all_jogos = []
maximo_repetido = 9

vezes = 0

while True:
    numbers = get_numbers(15)
    for i in all_jogos:
        total_repetido = len(set(numbers).intersection(i))
        if total_repetido <= maximo_repetido:
            vezes += 1
        else:
            vezes = 0
            break
    if vezes >= len(all_jogos):
        all_jogos.append(numbers)
        print("%s," % ordenar(numbers))

基本上,我的意图是生成15个数字的列表,以便它们之间重复的数字不超过9个(变量maximo_repetido),生成尽可能多的列表。与all_jogos中包含的所有列表进行比较,只要接受条件,这些列表就会随着每个循环而增长。你知道吗

问题是,所有可能的结果都不可能出现,因为只有在生成15个随机数之后才能进行验证/比较。你知道吗

当您要生成数字时,您如何设置条件/验证/比较,迫使您只搜索可能的结果?你知道吗


Tags: 列表getreturndef数字randomallnumbers
1条回答
网友
1楼 · 发布于 2024-09-27 21:30:38

^{}给出n中元素的所有长度组合。这就是你想用的。你知道吗

import itertools

numbers = range(1, 26)

combos = itertools.combinations(numbers, 15)

combos现在是一个迭代器(不是一个列表,注意,如果您需要多次阅读它,您需要显式地转换它),它包含所有15个长度为1-25的数字组合,您可以使用*或其他寻路算法来找到最佳可能的解决方案。你知道吗

相关问题 更多 >

    热门问题