链式比较:
>>> 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'}