我正在使用exrex
包来生成正则表达式的所有排列列表。但是,我有几个正则表达式,并希望创建一组所有排列(没有重复)。所以,给定:
from exrex import generate
my_regexs=('a|b','a|c')
expansions=map(generate,my_regexs)
也许我甚至不需要map
或中间变量expansions
- 不确定。现在,我如何从这些中获取排序列表:
# 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']
感谢您对此提供任何帮助,我打赌有一个简单的单行程序,可以执行此操作。
注意:我们正在处理一个包含多个生成器的map
对象(即多个生成器的有序容器,而不是list
个列表!)
更新:我认为我输入输出清晰了:
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
答案 0 :(得分:1)
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']
答案 1 :(得分:1)
另一个答案涵盖嵌套理解案例,因此我正在更新此答案以使用itertools.chain.from_iterable
。
from exrex import generate
from itertools import chain
flatten = chain.from_iterable
regexes = ('a|b', 'a|c')
ordered_unique = sorted(set(flatten(map(generate, regexes))))