python - 如何避免冗余并将过滤器应用于字符串组合

标签 python algorithm python-itertools

我想避免字符串列表中所有可能的组合出现冗余(例如,在我的上下文中,11222211 相同,因此只有一个或其他应该在结果列表中)。

我还想在组合过程中应用过滤器。例如,我不想在结果中包含任何包含 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/

相关文章:

python-3.x - 按行和列将 Pandas Dataframe 的元素重新组织为新的 dataframe

python - 如何使用scrapy抓取需要登录的网站?

python - Pandas .loc[] 副作用将 bools 更改为 floats

python - smtplib.SMTP 无法登录

c++ - 数据结构实现代码理解

algorithm - 两个最大堆的交集

python - 从抽象方法继承包装器

algorithm - 如何找出合并排序实现的时间复杂度?

python - 任何人都可以提供一种更 pythonic 的方式来生成莫里斯序列吗?

python - 如何在一个循环中比较两个列表的值是否相等?