我试图创建一个具有特定模式的项目列表,到目前为止我的设计是这样的,
patterns = [
'{column1}{column2}',
'{column1}@{column3}',
'{column2}#{column4}',
'{column3}!@#'
]
for c1 in possible_column1:
for c2 in possible_column2:
for c3 in possible_column3:
for c4 in possible_column4:
data = {
'column1': c1,
'column2': c2,
'column3': c3,
'column4': c4,
}
for pattern in patterns:
result.append(pattern.format(**data))
设计有很多问题,
list(set(result))
以使列表唯一编写此类算法的常用方法是什么?
patterns
列表会有所不同,并且会经常更改,也可能会添加新类型的列
P.S
在我看来,这与排列不同。
答案 0 :(得分:2)
您可以使用其他数据结构(dict
)来保留模式:
patterns = {
'{0}{1}': (possible_column1, possible_column2),
'{0}@{1}': (possible_column1, possible_column3),
'{0}#{1}': (possible_column2, possible_column4),
'{0}!@#': (possible_column3, )
}
使用该词典,您可以对该词典的“值”使用itertools.product
:
from itertools import product
# Just some data for the possible columns...
possible_column1 = list('12')
possible_column2 = list('34')
possible_column3 = list('56')
possible_column4 = list('78')
result = []
for pattern, cols in patterns.items():
for prod in product(*cols):
result.append(pattern.format(*prod))
# or if you like it shorter:
# result = [pattern.format(*prod) for pattern, cols in patterns.items() for prod in product(*cols)]
这样就不会创建重复的条目。