一日一技:如何用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循环嵌套一样拼接起来。


目录
相关文章
|
7天前
|
Python
在 Python 中,对列表进行排序有两种常用的方法
在 Python 中,对列表进行排序有两种常用的方法
|
5天前
|
移动开发 Unix Linux
Python 遍历文件每一行判断是否只有一个换行符详解
**Python 检查文件每行换行符:** 文章探讨了在Python中验证文件每行是否仅含一个换行符的需求。通过提供代码示例,展示了如何打开文件,遍历行,判断行尾的换行情况。基础实现检查`\n`,扩展版考虑了`\r\n`,并可选地将结果保存至新文件。这些功能有助于确保数据格式规范。
17 0
|
1天前
|
机器学习/深度学习 数据处理 索引
Python遍历矩阵的技巧与实践
Python遍历矩阵的技巧与实践
9 2
|
1天前
|
存储 数据处理 计算机视觉
Python中的列表处理:获取与设置缩略图的艺术
Python中的列表处理:获取与设置缩略图的艺术
6 1
|
1天前
|
Python
python 中列表和元组的解包
【6月更文挑战第17天】
12 1
|
1天前
|
Java C语言 Python
Python语言的列表推导式怎么写
Python语言的列表推导式怎么写
|
6天前
|
Python
Python列表推导式是一种简洁的创建新列表的方式,它允许你在一行代码中完成对数据的操作和转换
【6月更文挑战第19天】Python列表推导式是创建新列表的简洁语法,它在一行内处理数据。表达式如`[expr for item in iterable if cond]`,其中`expr`是对元素的操作,`item`来自`iterable`,`if cond`是可选过滤条件。例如,将数字列表平方:`[x**2 for x in numbers]`。嵌套列表推导处理复杂结构,如合并二维数组:`[[a+b for a,b in zip(row1, row2)] for row1, row2 in zip(matrix1, matrix2)]`。简洁但勿过度复杂化。
13 5
|
6天前
|
Python
在Python中,解包参数列表和Lambda表达式是两个不同的概念
【6月更文挑战第19天】在Python中,解包参数允许将序列元素作为单独参数传递给函数,如`greet(*names_and_ages)`。而Lambda表达式用于创建匿名函数,如`lambda x, y: x + y`。两者可结合使用,如`max(*numbers)`找列表最大值,但过度使用lambda可能降低代码可读性。
12 3
|
23小时前
|
IDE 开发工具 Python
使用python3遍历文件夹并将文件目录保存到指定文件
使用python3遍历文件夹并将文件目录保存到指定文件
6 0
|
3天前
|
Python
Python优雅遍历字典删除元素的方法
本文详细介绍了Python优雅遍历字典删除元素的五种方法,字典推导式是删除字典中元素的最常见且最优雅的方法,因为它清晰、简洁且易于理解。其他方法可能在某些特定情况下有用,但通常不如字典推导式通用或高效。
11 0