前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:如何用Python遍历多个列表元素的所有组合

一日一技:如何用Python遍历多个列表元素的所有组合

作者头像
青南
发布2019-06-26 14:09:44
15.7K0
发布2019-06-26 14:09:44
举报
文章被收录于专栏:未闻Code未闻Code
大家小时候可能玩过“谁”-“什么时候”-“在哪里”-“干什么”的游戏,这个游戏用Python来表述是这样的:
代码语言:javascript
复制
import randomwho = ['王小一', '张小二', '李小三', '朱小四']when = ['早上8点', '下午3点', '凌晨2点']where = ['在厕所','在卧室', '在姐姐房间里', '在教室里']do = ['拉屎', '抽烟', '打架']
print(random.choice(who), random.choice(when), random.choice(where), random.choice(do))

运行效果如下图所示:

现在,我想知道这些句子一共有哪些组合,应该怎么办呢?

最常见的写法是嵌套4个for循环:

代码语言:javascript
复制
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计算可迭代对象的笛卡尔积。

它的使用方法为:

代码语言:javascript
复制
import itertoolswho = ['王小一', '张小二', '李小三', '朱小四']when = ['早上8点', '下午3点', '凌晨2点']where = ['在厕所','在卧室', '在姐姐房间里', '在教室里']do = ['拉屎', '抽烟', '打架']
for result in itertools.product(who, when, where, do):    print(''.join(result))

运行效果如下图所示:

itertools.product可以接收非常无数个可迭代的对象,然后把他们想for循环嵌套一样拼接起来。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档