我想为给定列表中的可能产品找到一种方法。下面,我有一个例子
到目前为止,我试过这个:
for p in itertools.product(the_list, repeat=2):
print p
但是,这将返回可以从给定列表中生成的所有可能性。你能帮我生成下面的例子吗?
一个例子:
the_list=['A1','A2','A3','B1','B2','B3','C1','C2','C3','D1','D2','D3']
The results should be:
['A1A2','A1B2','A1C2','A1D2','A2A3','A2B3','A2C3','A2D3','A3A1','A3B1','A3C1','A3D1'
'B1A2,'B2A3'...
'C1A2'...']
基本上,大写字母表示状态,数字表示顺序。因此,如果它以 A1 开头,则只能以编号为 2 的状态继续,例如首先是 A1,然后是 A2 或 B2 或 C2 或 D2。它也是圆形的,这意味着 A3 后面是 A1、B1、C1 或 D1。
最佳答案
l=['A1','A2','A3','B1','B2','B3','C1','C2','C3','D1','D2','D3']
result = [i + j for i in l for j in l if int(j[1]) == int(i[1]) + 1 or (j[1] == '1' and i[1] == '3')]
print(result)
这输出:
['A1A2', 'A1B2', 'A1C2', 'A1D2', 'A2A3', 'A2B3', 'A2C3', 'A2D3', 'A3A1', 'A3B1', 'A3C1', 'A3D1', 'B1A2', 'B1B2', 'B1C2', 'B1D2', 'B2A3', 'B2B3', 'B2C3', 'B2D3', 'B3A1', 'B3B1', 'B3C1', 'B3D1', 'C1A2', 'C1B2', 'C1C2', 'C1D2', 'C2A3', 'C2B3', 'C2C3', 'C2D3', 'C3A1', 'C3B1', 'C3C1', 'C3D1', 'D1A2', 'D1B2', 'D1C2', 'D1D2', 'D2A3', 'D2B3', 'D2C3', 'D2D3', 'D3A1', 'D3B1', 'D3C1', 'D3D1']
如果你更喜欢可读性而不是紧凑性,那么打破单行
l=['A1','A2','A3','B1','B2','B3','C1','C2','C3','D1','D2','D3']
result = []
for i in l:
for j in l:
if int(j[1]) == int(i[1]) + 1 or (j[1] == '1' and i[1] == '3'):
result.append(i+j)
print(result)
它输出相同的东西。
关于Python 给定列表的一些特殊产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14168701/