列表推导式

博客主要介绍Python嵌套列表推导式。先阐述普通列表推导式结构,包括表达式、循环变量、可迭代对象和筛选条件。接着以生成10个10 - 100随机数为例,讲解升级的嵌套列表推导式,说明其执行顺序和原理,类似递归。

嵌套列表推导式

对于普通的列表推导式子相信大家一看就懂
[ expression for var in iterable if condition ]

其中,expression表示参与列表生成的表达式,可包含变量、函数调用等操作,用于生成列表中的元素;var:循环变量,iterable表示可迭代的对象,例如列表、元组、集合等;if condition表示对条件的筛选,可以省略。

expression表示要对每个var进行操作的表达式,var是可迭代对象中的每个元素,if condition是可选的筛选条件。在执行完毕后,将得到一个新的列表new_list。

生成10个10~100的随机数

在这里插入图片描述

import random

list_1 = [random.randint(10, 100) for i in range(10)]
print(list_1)
# [44, 89, 87, 39, 69, 61, 11, 39, 86, 71]

现在有一个升级的列表推导式,内容如下

在这里插入图片描述

a = [1, 3, 5, 5]
b = [2, 4, 6, 6]
abc = [x * y for x in a for y in b]
print(abc)
# [2, 4, 6, 6, 6, 12, 18, 18, 10, 20, 30, 30, 10, 20, 30, 30]

其中中括号[]里面有两个for循环,是不是已经有点晕了,其实很简单,python是脚本语言,只能一行一行去解释,并且只能从左向右,细心的小伙伴已经发现结果是4乘4=16个元素,先执行一次for x in a,然后执行for y in b一次,赋值给x*y ,然后再执行第2次for y in b,直到for y in b执行完毕,再去执行第二次for x in a,直到for x in a执行完毕。
有点像递归,俄罗斯套娃,一层一层解套就行了,相当与两层for循环

a = [1, 2, 5, 5]
b = [2, 4, 6, 6]
abc = []
for x in a:
    for y in b:
        abc.append(x * y)
print(abc)
#输出:[2, 4, 6, 6, 4, 8, 12, 12, 10, 20, 30, 30, 10, 20, 30, 30]

在这里插入图片描述

list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = [item for pair in zip(list1, list2) for item in pair]
print(merged_list) # 输出:[1, 4, 2, 5, 3, 6]

核心原理:zip() 函数与嵌套列表推导式

zip() 的作用
zip(list1, list2) 会将两个列表的对应元素按顺序配对,生成一个由元组组成的迭代器。例如,用户示例中的配对结果为 (1,4), (2,5), (3,6)。
​嵌套列表推导式的展开
外层循环 for pair in zip(list1, list2) 遍历每个元组,内层循环 for item in pair 将元组中的两个元素依次提取到新列表。最终合并顺序为:1→4→2→5→3→6
简单点来说就是第一个for循环的pair给第二个for循环用,第二个for循环的item用于产生列表元素

列表理解可能会变得更加复杂,并包括更复杂的表达式、循环和条件语句。一个示例:

myList = [2,4,6] #This creates a list with elements 2,4,6
print ([3*x for x in myList if x>3]
#  [12,18]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值