刚开始尝试使用python并需要一些指针。
我希望根据某些参数生成一个组合。
基本上,
parm1 = ['X1','X2']
parm2 = ['Y1','Y2']
我想从中得到的是
['X1','Y1','X1','Y1']
['X1','Y1','X1','Y2']
['X1','Y1','X2','Y1']
['X1','Y1','X2','Y2']
我以为可以使用二进制列表(itertools.product(“01”,repeat = 4))并替换每个元素,即。
0 0 0 0
0 0 0 1
代表
X1 Y1 X1 Y1
X1 Y1 X1 Y2
这样做的最佳方式是什么?
编辑:让我尝试添加更多信息。
Colour = ['Black','White']
Type = ['Car','Bike']
所以,我正在尝试将其格式化为以下
('Colour','Type','Colour','Type')
('0', '0', '0', '0')-->('Black','Car','Black','Car')
('0', '0', '0', '1')-->('Black','Car','Black','Bike')
('0', '0', '1', '0')-->('Black','Car','White','Car')
('0', '0', '1', '1')-->('Black','Car','White','Bike')
('0', '1', '0', '0')
('0', '1', '0', '1')
('0', '1', '1', '0')
('0', '1', '1', '1')
('1', '0', '0', '0')
('1', '0', '0', '1')
('1', '0', '1', '0')
('1', '0', '1', '1')
('1', '1', '0', '0')
('1', '1', '0', '1')
('1', '1', '1', '0')
('1', '1', '1', '1')-->('White','Bike','White','Bike')
我知道这可以通过列表中每个索引的if语句来完成,但是有替代方法吗?
再次编辑:
我写了这篇文章,但是认为有更多优雅的解决方案?
import itertools
q=[]
x=["","","",""]
q=list(itertools.product("01", repeat=4))
for p in q:
if float(p[0]) == 0:
x[0]= "Black"
else:
x[0] = "White"
if float(p[1]) == 0:
x[1]= "Car"
else:
x[1] = "Bike"
if float(p[2]) == 0:
x[2]= "Black"
else:
x[2] = "White"
if float (p[3]) == 0:
x[3] = "Car"
else:
x[3] = "Bike"
print p
print x
答案 0 :(得分:2)
基本上你想要的是这个的平面版本:
from itertools import product
nested = product(product(Colour, Type), repeat=2)
print list(nested)
# [(('Black', 'Car'), ('Black', 'Car')),
# (('Black', 'Car'), ('Black', 'Bike')),
# ...
# ]
所以你走了:
from itertools import product
nested = product(product(Colour, Type), repeat=2)
# flatten it by unpacking each element
print [(a,b,c,d) for ((a,b),(c,d)) in nested]
# alternative way to flatten the product
from itertools import chain
print [tuple(chain.from_iterable(x)) for x in nested]
要转换(0,1)
列表,您可以使用数字作为索引:
from itertools import product
Colour = ['Black','White'] # so Color[0] == 'Black'
Type = ['Car','Bike']
#make that list
nested = product((0,1), repeat=4) # use numbers not strings
print [(Colour[a], Type[b], Colour[c], Type[d]) for (a,b,c,d) in nested]