Python - 加快列表排列的生成(以及检查Dict中是否有permations的过程)

Geo*_*ina 4 python dictionary list permutation python-itertools

我需要一种更快的方法来生成列表的所有排列,然后检查每个排列是否在字典中.

        for x in range (max_combo_len, 0, -1):
            possible_combos = []
            permutations = list(itertools.permutations(bag,x))
            for item in permutations:
                possible_combos.append(" ".join(item))
            #then check to see if each possible combo is in a specific Dict
Run Code Online (Sandbox Code Playgroud)

如果有帮助,列表都将成为字符串列表.['比如','this','one']

我的解决方案有效,但速度很慢.可能是我需要停止使用Python,但我想我会先由你的专家运行它!

最好,加里

Amb*_*ber 5

一个非常基本的优化:

permutations = list(itertools.permutations(bag,x))
for item in permutations:
Run Code Online (Sandbox Code Playgroud)

可以变成...

for item in itertools.permutations(bag,x):
Run Code Online (Sandbox Code Playgroud)


per*_*iae 1

如果没有更好的输入情况,我无法很好地测试它,但这里有一些改进:

for x in xrange(max_combo_len, 0, -1):
    possible_combos = (" ".join(item) for item in itertools.permutations(bag,x))
    #then check to see if each possible combo is in a specific Dict
    combos =  (c for c in possible_combos if c in specific_dict)
Run Code Online (Sandbox Code Playgroud)

首先,假设您使用的是 Python 2.x,xrange则无需构建显式列表,而是根据x需要生成每个列表,这将有所帮助。

更重要的是,您可以将主要精力投入到生成器表达式中,并让它按需生成值。