使用列表推导计算笛卡尔积
>>> colors = ['black','white']
>>> sizes = ['S','M','L']
>>> tshirts = [(color,size) for color in colors for size in sizes]
>>> tshirts
[('black','S'),('black','M'),('black','L'),('white','S'),('white','M'),('white','L')]
>>> for color in colors:
... for size in sizes:
... print((color,size))
...
('black','S')
('black','M')
('black','L')
('white','S')
('white','M')
('white','L')
>>> tshirts = [(color,size) for size in sizes for color in colors]
...
>>> tshirts
[('black','S'),('white','S'),('black','M'),('white','M'),('black','L'),('white','L')]
第一段代码得到的结果是先以颜色排列,再以尺码排列。
第二段代码两个循环的嵌套关系和上面列表推导中for从句的先后顺序一样。
如果想依照先尺码后颜色的顺序来排列,只需要调整从句的顺序,例如第三段代码。
、
使用生成器表达式来计算笛卡尔积
>>> colors = ['black','white']
>>> sizes = ['S','M','L']
>>> for tshirt in ('%s %s' % (c,s) for c in colors for s in sizes):
... print(tshirt)
...
black S
black M
black L
white S
white M
white L
生成器表达式逐个产出元素,不会一次性产出一个含有6个元素的列表。