一行代码实现的功能,决不写5行代码
在Python中,代码不是越多越好,而是越少越好。代码不是越复杂越好,而是越简单越好
切片
对于经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片操作符
name_list = ['Tom', 'Sam', 'Martin', 'Bob', 'Jack']
print(name_list[0:3])
['Tom', 'Sam', 'Martin']
Process finished with exit code 0
[0:3] 从索引0开始,直到索引3为止,但不包括索引3,如果第一个索引为0,则可以省略
[-2:] 从倒数第二个元素开始,直到结尾,包括最后一个元素
[:] 选取所有元素
[:10:2] 前十个元素,每两个取一次
[::5] 所有元素,每五个取一次
name_list = ['Tom', 'Sam', 'Martin', 'Bob', 'Jack']
print(name_list[0:3])
print(name_list[:])
print(name_list[-2:])
print(name_list[:2])
num_list = list(range(20))
print(num_list[:10:2])
print(num_list[::5])
['Tom', 'Sam', 'Martin']
['Tom', 'Sam', 'Martin', 'Bob', 'Jack']
['Bob', 'Jack']
['Tom', 'Sam']
[0, 2, 4, 6, 8]
[0, 5, 10, 15]
Process finished with exit code 0
迭代
在Python中,for循环不仅可以用在list和tuple上,还可以作用在其他可迭代的对象上
字典迭代
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 迭代key
for key in d:
print(key, d[key])
for key, value in d.items():
print(key, value)
a 1
b 2
c 3
d 4
a 1
b 2
c 3
d 4
Process finished with exit code 0
当我们使用for循环时,只要作用于一个可迭代的对象,for循环就可以正常运行
# 判断一个对象是否可以迭代
print(isinstance('abc', Iterable))
print(isinstance([1, 2, 3], Iterable))
print(isinstance(456, Iterable))
True
True
False
任何可迭代的对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环
列表生成式
列表生成式是Python内置的非常简单却强大的功能
print(list(range(1, 10)))
print([x * x for x in range(10)])
print([x for x in range(10) if x % 2 == 0])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 2, 4, 6, 8]
Process finished with exit code 0
eg:列出当前目录下的所有文件名
print([name for name in os.listdir('.')])
['example1.py', 'example2.py', 'example3.py']
eg:把列表中字符串变为小写
print([s.lower() for s in ['Hello', 'World']])
['hello', 'world']
运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而且代码却十分简洁
生成器
在Python中,一边循环一边计算的机制,称为生成器,使用生成器可以节省内存
g = (x * x for x in range(100))
print(g)
print(next(g))
print(next(g))
<generator object <genexpr> at 0x000001CF05F52D48>
0
1
generator保存的是算法,每次调用next(g),就可以计算出g的下一个元素的值,直到计算到最后一个元素,当没有更多元素时,抛出StopIteration的错误
我们同样可以使用for循环来遍历一个迭代器
for i in g:
print(i)
eg:斐波拉契数列
def fib(n):
"""
生成兔子数列
:param n:
:return:
"""
x, a, b = 0, 0, 1
while x < n:
yield b
a, b = b, a + b
x += 1
return 'done'
for i in fib(10):
print(i)
1
1
2
3
5
8
13
21
34
55
Process finished with exit code 0
generator是非常强大的工具,在Python中,可以简单的把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator