我想避免字符串列表中所有可能的组合出现冗余(例如,在我的上下文中,1122
与 2211
相同,因此只有一个或其他应该在结果列表中)。
我还想在组合过程中应用过滤器。例如,我不想在结果中包含任何包含 3
的字符串。
我应该如何处理这个逻辑?
这段代码正在做组合
>>> keywords = [''.join(i) for i in itertools.product(['11', '22', '33'], repeat = 2)]
>>> keywords
['1111', '1122', '1133', '2211', '2222', '2233', '3311', '3322', '3333']
最佳答案
根据您的实际数据,可能是更有效的方法,但下面的算法将起作用。我们通过简单的比较消除重复项。我已将对“3”的检查放入函数中。这比直接在列表理解中执行稍慢,但它使代码更加通用。
import itertools
bases = ['11', '22', '33', '44']
def is_ok(u, v):
''' Test if a u,v pair is permitted '''
return not ('3' in u or '3' in v)
keywords = [u+v for u, v in itertools.product(bases, repeat = 2) if u <= v and is_ok(u, v)]
输出
['1111', '1122', '1144', '2222', '2244', '4444']
print(keywords)
关于python - 如何避免冗余并将过滤器应用于字符串组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47815181/