Python 高级特性之列表生成式

已经一个列表 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 我们想得到 [1 * 1, 2 * 2, 3 * 3, …, 10 * 10], 此时, 借助列表生成式可以很方便的实现:

[x * x for x in range(1, 11)]
 
 
  • 1
  • 1

[x * x for x in range(1, 11)] 就是一个列表生成式, 它的基础语法是: 
[exp for iter_var in iterable] 
首先迭代 iterable 里所有内容, 每一次迭代, 都把 iterable 里相应内容放到 iter_var 中, 再在表达式 exp 中应用该 iter_var 的内容, 最后用表达式的计算值生成一个新的列表.

除了基础语法外, 列表生成式还可以使用两层循环:

L = [(x, y) for x in range(2) for y in range(3)]
>>[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
 
 
  • 1
  • 2
  • 1
  • 2

还可以加上判断语句:

N = [x for x in range(10) if x > 5]
>>[6, 7, 8, 9]
 
 
  • 1
  • 2
  • 1
  • 2

运用列表生成式, 可以写出非常简洁的代码; 
例如, 把一个 list 中所有的字符串变成小写:

L = ['Hello', 'World', 'IBM', 'Apple']
[s.lower() for s in L]
>>> ['hello', 'world', 'ibm', 'apple']
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

注意事项 
1. 当需要只是执行一个循环的时候尽量使用循环而不是列表解析, 这样更符合Python提倡的直观性:

for item in sequence: 
    process(item)
 
 
  • 1
  • 2
  • 1
  • 2

2. 当有内建的操作或者类型能够以更直接的方式实现的, 不要使用列表解析. 
例如复制一个列表时, 使用; L1=list(L) 即可, 不必使用: L1=[x for x in L]

3. 如果需要对每个元素都调用并且返回结果时, 应使用 L1=map(f,L), 而不是 L1=[f(x) for x in L].

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python高级特性包括但不限于以下内容: 1. 切片(Slicing):可以通过切片操作来获取列表、字符串、元组等序列类型的子序列。切片操作使用[start:end:step]的语法,可以灵活地选择需要的元素。 2. 迭代(Iteration):可以使用for循环来遍历列表、字符串、字典等可迭代对象的元素。在循环中,可以使用内置函数enumerate()来同时获取元素的索引和值。 3. 列表生成(List Comprehension):可以使用简洁的语法来创建列表列表生成的语法为[expression for item in iterable if condition],可以根据条件筛选和转换元素。 4. 生成器(Generator):可以使用生成器函数或生成器表达来创建生成器。生成器是一种特殊的迭代器,可以按需生成值,而不是一次性生成所有值。 5. 迭代器(Iterator):可以使用迭代器来遍历可迭代对象的元素。迭代器是一个实现了__iter__()和__next__()方法的对象,可以使用内置函数iter()来获取迭代器。 6. 其他高级特性还包括装饰器(Decorator)、上下文管理器(Context Manager)、匿名函数(Lambda Function)等。 以下是一个演示列表生成生成器的例子: 1. 列表生成: ```python # 创建一个包含1到10的平方的列表 squares = [x**2 for x in range(1, 11)] print(squares) # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ``` 2. 生成器: ```python # 创建一个生成器,按需生成斐波那契数列的值 def fibonacci(): a, b = 0, 1 while True: yield a a, b = b, a + b fib = fibonacci() print(next(fib)) # 输出:0 print(next(fib)) # 输出:1 print(next(fib)) # 输出:1 print(next(fib)) # 输出:2 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值