Python 提供了对容器元素构建和操作的两个便捷语法,分别是:
- 生成式语法:构造容器元素
- 切片语法:容器元素选择
1. 生成式语法
生成式语法能够实现非常便捷的构建容器元素,下面是使用案例:
1.1 列表生成式
# 循环 my_list1 = [i for i in range(1, 11)] print(my_list1) my_list1 = list(i for i in range(1, 11)) print(my_list1) # 条件判断 my_list2 = [i for i in range(1, 11) if i % 2 == 0] print(my_list2) my_list2 = list(i for i in range(1, 11) if i % 2 == 0) print(my_list2) # 循环嵌套 my_list3 = [i * j for i in range(1, 11) for j in range(1, 11)] print(my_list3) my_list3 = list(i * j for i in range(1, 11) for j in range(1, 11)) print(my_list3) # 循环嵌套 + 条件判断 my_list4 = [i * j for i in range(1, 11) for j in range(1, 11) if i * j % 2 == 0] print(my_list4) my_list4 = list(i * j for i in range(1, 11) for j in range(1, 11) if i * j % 2 == 0) print(my_list4)
1.2 集合生成式
集合生成式如果产生重复元素将会被丢弃。
import random my_set = {random.randint(1, 10) for i in range(1, 11)} print(my_set) my_set = set(random.randint(1, 10) for i in range(1, 11)) print(my_set)
1.3 字典生成式
import random keys = 'abc' vals = [10, 20, 30] my_dict = {key: val for key, val in zip(keys, vals)} print(my_dict) # 注意: 这种方式不能用冒号,需要用元组 my_dict = dict((key, val) for key, val in zip(keys, vals)) print(my_dict)
1.4 元组生成式
import random # 这种方式生成的是生成器,而并不是元组 my_tuple = (i for i in range(5)) print(my_tuple) # 下面这种方式生成的才是元素 my_tuple = tuple(i for i in range(5)) print(my_tuple)
2. 切片语法
切片语法能够很好的对序列容器进行范围元素的操作,比如:字符串、列表、元组,但是对于非序列容器 set 和 dict 则无效。
切片的语法格式:
1. 语法格式: my_str[start:end:step]
2. step 正数表示从左向右 start 留空默认为0 end 留空默认为序列长度
3. step 负数表示从右向左 start 表示-1 end 表示最后一个元素小1的位置
4. 注意: start 和 end 组成的区间为左闭右开
示例代码:
my_str = '123456789' # 1. 选择前4个字符 print(my_str[:4]) # 2. 选择1到4的元素 print(my_str[1:4]) # 3. 选择1之后的所有元素 print(my_str[1:]) # 4. 步长为2,默认为 1 print(my_str[::2]) # 4. 选择倒数4个字符 # start 或者 end 如果为负的话,表示索引从右侧开始算的位置 print(my_str[-1:-5:-1]) # start 或者 end 如果为正的话,表示索引从左侧开始算的位置 print(my_str[8:5:-1]) # start 和 end 可正可负,只要能与 step 表示表示一个正确的区间即可 # 5. 字符串逆序 print(my_str[::-1])
对列表、元组使用切片的语法和字符串是相同的,这里不再额外举例,感兴趣的同学可以自行尝试。