【Python进阶】进阶小技巧

 链式比较:

>>> x = 5
>>> 1 < x < 10
True
>>> 10 < x < 20
False
>>> x < 10 < x*10 < 100
True
>>> 10 > x <=9
True
>>> 5 == x > 4
True

Tips:解释器会把链式比较进行拆分,比如 1 < x < 10 拆分成 1 < x and x < 10,最后得出结果 True;

enumerate() 函数:

enumerate() 将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

语法及参数:

enumerate(sequence, [start=0]]

  • sequence:一个序列、迭代器、或其他可迭代对象;
  • start:下标起始位置;

实例:

>>> languages = ['Python', 'Java', 'C++']

# 默认下标为 0
>>> print(list(enumerate(languages)))
[(0, 'Python'), (1, 'Java'), (2, 'C++')]

# 下标为 1
>>> print(list(enumerate(languages, start=1)))
[(1, 'Python'), (2, 'Java'), (3, 'C++')]

# for 循环
>>> for i, j in enumerate(languages):
...     print(f'下标:{i},元素:{j}')
...     
下标:0,元素:Python
下标:1,元素:Java
下标:2,元素:C++

生成器:

生成器不存储中间结果,因此占用内存较少,但是它不能重新迭代;

实例: 

>>> nums = [1, 2, 3, 4, 5, 6]

# nums 是任何可迭代对象
>>> x = (n for n in nums if n > 3)

# 返回一个生成器对象
>>> print(x, type(x))
<generator object <genexpr> at 0x000001D6755EA228>

# 可以对生成器对象进行迭代操作(迭代生成列表)
>>> print(list(x))
[4, 5, 6]

# 迭代器存储中间结果,比较节省内存资源,因此它不能重新迭代;
>>> print(list(x))
[]

# for 循环迭代
>>> x = (n for n in nums if n > 3)
>>> for i in x:
...     print(i)
...     
4
5
6

列表推导式:

比生成器对象执行速度快,它会把整个结果保存起来,因此内存开销更大,可以重新迭代;

实例:

>>> nums = [1, 2, 3, 4, 5, 6]

# nums 是任何可迭代对象
>>> x = [n for n in nums if n > 3]

# 它会把整个结果保存起来
>>> print(x)
[4, 5, 6]

# 可以重新迭代
>>> print(x)
[4, 5, 6]

字典推导式:

方法一:

>>> lists = [('one', 'Python'), ('two', 'Java'), ('three', 'C++')]
>>> d = {k: v for k, v in lists}
>>> print(d)
{'one': 'Python', 'two': 'Java', 'three': 'C++'}

方法二:

>>> nums = [1, 2, 3]
>>> n = {str(i): i for i in nums}
>>> print(n)
{'1': 1, '2': 2, '3': 3}

方法三:

>>> x = ['A', 'B', 'C']
>>> y = ['a', 'b', 'c']
>>> z = {i: j for i, j in zip(y, x)}
>>> print(z)
{'a': 'A', 'b': 'B', 'c': 'C'}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值