如何遍历一系列固定列表中的所有可能值?

2 投票
3 回答
1051 浏览
提问于 2025-04-16 07:13

(python)

我有以下的值和列表:

name = colour
size = ['256', '512', '1024', '2048', '4096', '8192', '16384', '32768']
depth = ['8', '16', '32']
scalar = ['False', 'True']
alpha = ['False', 'True']
colour = app.Color(0.5)

我想要遍历这些值,生成每一种可能的组合,结构如下:

createChannel(ChannelInfo(name, size, depth, scalar, alpha, colour))

也就是说,名字、大小等的值必须保持在同一个位置,但它们需要遍历所有可能的大小、深度等组合。

换句话说,我想要得到类似这样的结果:

createChannel(ChannelInfo('colour', 256, 8, False, True, 0.5)
createChannel(ChannelInfo('colour1', 256, 8, False, False, 0.5)
createChannel(ChannelInfo('colour2', 256, 16, False, False, 0.5)

……等等……总共有96种组合

谢谢

3 个回答

0

我最近也遇到了同样的需求。我从这里借用了一个交叉乘积的函数。

def cross(*sequences):
    # visualize an odometer, with "wheels" displaying "digits"...:
    wheels = map(iter, sequences)
    digits = [it.next() for it in wheels]
    while True:
        yield tuple(digits)
        for i in range(len(digits)-1, -1, -1):
            try:
                digits[i] = wheels[i].next()
                break
            except StopIteration:
                wheels[i] = iter(sequences[i])
                digits[i] = wheels[i].next()
        else:
            break

你只需要给它一组列表,它就会返回一个生成器,按照你上面指定的方式进行迭代。

1
from itertools import product

# generates all the possible values
combinations = product(size, depth, scalar, alpha)
# call the function for each combination
# i guess `names` is a list of 96 names ..
items = [createChannel(ChannelInfo(name, *row)) 
            for name, row in zip(names, combinations)]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

7

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有bug,或者是因为我们没有正确理解某些概念。解决这些问题的第一步就是要仔细检查代码,看看有没有拼写错误、语法错误或者逻辑错误。

另外,了解一些基本的编程概念也很重要,比如变量、循环和条件判断。这些都是编程的基础,掌握了它们,你就能更好地理解代码是如何工作的。

如果你在编程过程中遇到困难,不妨去网上查找相关的资料或者向其他人请教。很多时候,别人遇到过类似的问题,他们的经验可能会帮助你更快地找到解决方案。

总之,编程是一项需要不断学习和实践的技能,遇到问题时不要气馁,耐心寻找解决办法,你会越来越熟练的。

import itertools
for iter in itertools.product(size, depth, scalar, alpha):
    print iter # prints 96 four-element tuples

撰写回答