Python 列出二进制组合并映射到数据

Python 列出二进制组合并映射到数据,python,list,Python,List,我刚开始尝试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 将

我刚开始尝试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

基本上,您需要的是此的平面版本:

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]

有选择某些组合的规则吗?您能更好地解释一下如何从parm1和parm2到您请求的输出列表吗?您列出的四个列表由
列表(itertools.product(parm1,parm2,parm1,parm2))[:4]
给出,但我不知道你是否只列出了你想要的前四个,只是没有提到你想要更多,或者这些是你想要的唯一四个,我不了解选择规则。也许你想再举一个你需要的输入和输出的例子?添加了一些更多的信息,希望现在清楚了。我可能会使用
[tuple(chain)](*p))在嵌套中为p]
链。从_iterable
或其他东西;使用
repeat
避免硬编码,然后在最后重新引入它似乎是一种耻辱。我在
nested=product(product(color,Type),repeat=2)处遇到语法错误。
傻我,明白了,
itertools.product
@Ash:我有一个额外的
在里面,试试看again@JochenRitzel是的!现在更明白了!:)我知道这是正确的解决方案,但为了获得一些诀窍,如何像我尝试的那样映射1和0?