import randomwho = ['王小一', '张小二', '李小三', '朱小四']when = ['早上8点', '下午3点', '凌晨2点']where = ['在厕所','在卧室', '在姐姐房间里', '在教室里']do = ['拉屎', '抽烟', '打架']
print(random.choice(who), random.choice(when), random.choice(where), random.choice(do))
运行效果如下图所示:
现在,我想知道这些句子一共有哪些组合,应该怎么办呢?
最常见的写法是嵌套4个for循环:
who = ['王小一', '张小二', '李小三', '朱小四']when = ['早上8点', '下午3点', '凌晨2点']where = ['在厕所','在卧室', '在姐姐房间里', '在教室里']do = ['拉屎', '抽烟', '打架']
for people in who: for time in when: for place in where: for action in do: print(people, time, place, action)
运行效果如下图所示:
这样写虽然可以实现效果,但显然4个for循环使得代码非常难看。
在Python中,对于这种情况,有现成的处理方法,那就是 itertools.product
计算可迭代对象的笛卡尔积。
它的使用方法为:
import itertoolswho = ['王小一', '张小二', '李小三', '朱小四']when = ['早上8点', '下午3点', '凌晨2点']where = ['在厕所','在卧室', '在姐姐房间里', '在教室里']do = ['拉屎', '抽烟', '打架']
for result in itertools.product(who, when, where, do): print(''.join(result))
运行效果如下图所示:
itertools.product
可以接收非常无数个可迭代的对象,然后把他们想for循环嵌套一样拼接起来。