<p>我正在使用<code>exrex</code>包为正则表达式生成所有排列的列表。但是,我有几个正则表达式,并希望创建一组所有排列(没有重复)。所以,假设:</p>
<pre><code>from exrex import generate
my_regexs=('a|b','a|c')
expansions=map(generate,my_regexs)
</code></pre>
<p>也许我甚至不需要<code>map</code>或中间变量<code>expansions</code>来实现这个-不确定。现在,如何从以下列表中获得排序列表:</p>
<pre><code># Create a set from all of the expansions (e.g., let's store in myset, for clarity)
# in order to merge duplicates
myset=... # Results in myset containing {'a','c','b'} - hash order
sorted_list=sorted(myset) # Finally, we get ['a','b','c']
</code></pre>
<p>谢谢你的帮助,我打赌有一个简单的一行一个列表理解,可以做到这一点</p>
<p><strong>注意</strong>:我们处理的是包含多个生成器的<code>map</code>对象(即,多个生成器的序列容器,而不是列表的<code>list</code>!)</p>
<p><strong>更新</strong>:我想我已经把输入和输出弄清楚了:</p>
<pre><code>Input: ('a|b','a|c') # Two reg-exs, results in all-permutations: ['a','b','a','c']
Output: ['a','b','c'] # Eliminating duplicates, we get the output presented
</code></pre>
<pre><code>from exrex import generate
rgxs = (r'a|b', r'a|c')
expansions = sorted(set(e for r in rgxs for e in generate(r)))
print(expansions) # [u'a', u'b', u'c']
</code></pre>