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

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

大家小时候可能玩过“谁”-“什么时候”-“在哪里”-“干什么”的游戏,这个游戏用Python来表述是这样的:

import random
who = ['王小一', '张小二', '李小三', '朱小四']
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 itertools
who = ['王小一', '张小二', '李小三', '朱小四']
when = ['早上8点', '下午3点', '凌晨2点']
where = ['在厕所','在卧室', '在姐姐房间里', '在教室里']
do = ['拉屎', '抽烟', '打架']
for result in itertools.product(who, when, where, do):
    print(''.join(result))

运行效果如下图所示:

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


目录
打赏
0
0
0
0
12
分享
相关文章
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
108 62
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
39 20
|
5天前
|
[oeasy]python090_列表_构造_范围_range_start_end_step_步长
本文介绍了Python中列表的生成方法,重点讲解了`range()`函数的使用。通过`range(start, stop, step)`可生成一系列整数,支持正负步长,但不支持小数参数。文章从基础的列表追加、直接赋值到复杂的应用场景(如生成等宽字体的月份列表),结合实例演示了`range()`的灵活性与实用性。最后总结了`range()`的关键特性:前闭后开、支持负数步长,并提供了进一步学习的资源链接。
40 14
[oeasy]python088_列表_清空列表_clear
本文介绍了Python中列表的清空方法`clear`。通过实例讲解了`clear`与将列表赋值为空列表的区别,前者会清空原列表内容,而后者创建新空列表,不影响原列表。文中以收银程序为例,展示了`clear`的实际应用场景,并通过地址观察解释了两者的机制差异。最后总结了相关术语如`list`、`append`、`clear`等,帮助理解列表操作及方法调用的概念。
39 6
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
Python数据结构:列表、元组、字典、集合
Python 中的列表、元组、字典和集合是常用数据结构。列表(List)是有序可变集合,支持增删改查操作;元组(Tuple)与列表类似但不可变,适合存储固定数据;字典(Dictionary)以键值对形式存储,无序可变,便于快速查找和修改;集合(Set)为无序不重复集合,支持高效集合运算如并集、交集等。根据需求选择合适的数据结构,可提升代码效率与可读性。
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
本文介绍了Python中`dir()`函数的使用方法及其作用。`dir()`可以列出当前作用域内的所有变量和成员,类似于`locals()`,但`dir()`不仅限于本地变量,还能显示模块中的所有成员。通过`dir(__builtins__)`可以查看内建模块中的所有内建函数,如`print`、`ord`、`chr`等。此外,还回顾了`try-except-finally`结构在数据库连接中的应用,并解释了为何`print`函数可以直接使用而无需导入,因为它位于`__builtins__`模块中。最后,简要提及了删除`__builtins__.print`的方法及其影响。
58 0
Python 遍历文件每一行判断是否只有一个换行符详解
**Python 检查文件每行换行符:** 文章探讨了在Python中验证文件每行是否仅含一个换行符的需求。通过提供代码示例,展示了如何打开文件,遍历行,判断行尾的换行情况。基础实现检查`\n`,扩展版考虑了`\r\n`,并可选地将结果保存至新文件。这些功能有助于确保数据格式规范。
python遍历文件夹所有文件按什么排序
python遍历文件夹所有文件按什么排序
80 0
Python遍历文件夹所有文件并按指定排序
Python遍历文件夹所有文件并按指定排序
203 0

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等