我需要一种更快的方法来生成列表的所有排列,然后检查每个排列是否在字典中.
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.
更重要的是,您可以将主要工作投入到生成器表达式中,并使其按需生成值.