【问题标题】:How to generate sequences from different sets如何从不同的集合中生成序列
【发布时间】:2014-10-05 20:23:14
【问题描述】:

所以我有一系列元素集,如下所示:

elements= {
 'a' : '12345',
 'b' : '67890',
 'c' : 'abcdefg',
 'd' : 'hijklmn',
 ...
}

我想要做的是有一个函数,它接受输出的定义,并从上面的集合中返回与该定义匹配的所有可能的字符组合。

例如,如果函数接收到'abbc',那么它将返回包含集合 a 中的一个字符、后跟集合 b 中的一个字符、后跟集合 b 中的一个字符、后跟 a来自集合 c 的字符。

理想情况下,这将返回一个生成器。

我苦苦挣扎的是如何构建遍历输入字符的循环,从elements 中选择正确的集合,然后生成所有先前输入的所有组合。

例如,如果我像这样简单地循环输入,我如何获得下一个序列?

for c in list(input):
    element_set = list(elements[c])
    #now I've got the list of elements for this character, but how do I combine all possible values here with all possible values for the next character?

我可以建立一个列表列表,最终得到以下结果:

[ list(elements[a]), list(elements[b]), list(elements[b]), list(elements[c]) ]

但是我如何获取“位置 0 的所有可能值”+“位置 1 的所有可能值”等?

【问题讨论】:

    标签: python list generator


    【解决方案1】:

    您可以为此使用非常有用的itertools

    >>> elements = {'a': '12', 'b': '67', 
                    'c': 'ab', 'd': 'hi'} # shortened example; 875 answers otherwise!
    >>> s = 'abbc'
    >>> from itertools import product
    >>> for t in product(*[elements[c] for c in s]):
        print t
    
    
    ('1', '6', '6', 'a')
    ('1', '6', '6', 'b')
    ('1', '6', '7', 'a')
    ('1', '6', '7', 'b')
    ('1', '7', '6', 'a')
    ('1', '7', '6', 'b')
    ('1', '7', '7', 'a')
    ('1', '7', '7', 'b')
    ('2', '6', '6', 'a')
    ('2', '6', '6', 'b')
    ('2', '6', '7', 'a')
    ('2', '6', '7', 'b')
    ('2', '7', '6', 'a')
    ('2', '7', '6', 'b')
    ('2', '7', '7', 'a')
    ('2', '7', '7', 'b')
    

    【讨论】:

    • 我什至研究过 itertools。但是,我当然错过了这一点。现在我觉得自己很笨,哈哈。
    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多