嵌套列表推导式
对于普通的列表推导式子相信大家一看就懂
[ 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]
博客主要介绍Python嵌套列表推导式。先阐述普通列表推导式结构,包括表达式、循环变量、可迭代对象和筛选条件。接着以生成10个10 - 100随机数为例,讲解升级的嵌套列表推导式,说明其执行顺序和原理,类似递归。

1287

被折叠的 条评论
为什么被折叠?



