Python列表解析(列表推导式)

列表解析——用来动态地创建列表

[expr for iter_var in iterable if cond_expr]

例子一:

map(lambda x: x**2, range(6))

[0, 1, 4, 9, 16, 25]

[x**2 for x in range(6)]

[0, 1, 4, 9, 16, 25]

列表解析式可以取代内建的map()函数以及lambda,而且++效率更高++。

例子二:

seq = [11, 10, 9, 8, 7, 6]

filter(lambda x: x % 2, seq)

[11, 9, 7]

[x for x in seq if x % 2]

[11, 9, 7]

例子三:

找出文本中最长的词

# 第一个最长的词
longest = ''
for word in text:
    if len(word) > len(longest):
        longest = word
 

#所有最长的词
maxlen = max(len(word) for word in text) # 生成器表达式

[word for word in text if len(word) == maxlen] #链表推导式

不足: 列表解析得一个不足就是必要生成所有数据,用于创建整个列表。这可能对有大量数据得迭代其有负面效应。

++解决方法++:生成器表达式,通过结合列表解析和生成器解决了这个问题。

嵌套列表推导式
例一


all_data = [[1,3,5,7,9],
            [2,4,6,8,10]]

result = []
for nums in all_data:
    temp_num = [num for num in nums if num >= 5]
    result.extend(temp_num)

嵌套列表推导式

result = [num for nums in all_data for num in nums if num >= 5]

推导式中for的部分是按嵌套顺序排列的。

例二


some_tuples = [(1,2,3), (4,5,6), (7,8,9)]

flattened = [x for tup in some_tuples for x in tup]

flattened
[1,2,3,4,5,6,7,8,9]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
列表推导式是一种简洁而强大的方式来创建新的列表。它允许我们使用一行代码就能生成一个新列表,而不需要使用繁琐的循环语句。下面是对列表推导式的深入解析: 1. 基本语法:列表推导式由一对方括号 [] 组成,方括号内包含一个表达式和一个可选的条件语句。表达式用于生成新的元素,条件语句用于过滤元素。语法如下: `[expression for item in iterable if condition]` 其中,expression 是生成新元素的表达式,item 是可迭代对象中的每个元素,condition 是可选的条件语句。 2. 生成新列表列表推导式通过对可迭代对象进行迭代,并应用表达式来生成新的列表元素。例如,我们可以使用列表推导式来生成一个包含平方数的列表: `squares = [x**2 for x in range(1, 6)]` 在这个例子中,range(1, 6) 产生一个从 1 到 5 的可迭代对象,表达式 x**2 将每个元素平方,并将结果添加到新的列表 squares 中。 3. 条件过滤:在列表推导式中,我们可以使用条件语句来过滤元素。只有满足条件的元素才会被添加到新的列表中。例如,我们可以使用列表推导式来生成一个包含偶数的列表: `even_numbers = [x for x in range(1, 11) if x % 2 == 0]` 在这个例子中,x % 2 == 0 是一个条件语句,只有当 x 是偶数时才会将其添加到新的列表 even_numbers 中。 4. 嵌套循环:列表推导式还支持嵌套循环。我们可以在表达式中使用多个 for 循环来生成新的列表。例如,我们可以使用列表推导式来生成一个包含所有坐标点的列表: `coordinates = [(x, y) for x in range(1, 4) for y in range(1, 3)]` 在这个例子中,两个 for 循环嵌套在一起,分别迭代 x 和 y,生成所有可能的坐标点,并将它们作为元组添加到新的列表 coordinates 中。 5. 列表推导式与循环等价:列表推导式本质上等价于使用循环语句生成新的列表。例如,前面的平方数的例子可以用等价的循环语句来实现: ``` squares = [] for x in range(1, 6): squares.append(x**2) ``` 两种方式都会生成相同的结果,但列表推导式更加简洁和优雅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值