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

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

        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

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

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

最好,
加里

解决方法:

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

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)

首先,假设您使用的是Python 2.x,xrange将通过不构造显式列表来帮助,而只是根据需要生成每个x.

更重要的是,您可以将主要工作投入到生成器表达式中,并使其按需生成值.

上一篇:python – 同时迭代偶数和奇数列表项


下一篇:python中的高效列表映射