Python 提供了对容器元素构建和操作的两个便捷语法,分别是:
-
生成式语法:构造容器元素
-
切片语法:容器元素选择
-
生成式语法 {#title-0} ===================
生成式语法能够实现非常便捷的构建容器元素,下面是使用案例:
1.1 列表生成式 {#title-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 集合生成式 {#title-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 字典生成式 {#title-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 元组生成式 {#title-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)
- 切片语法 {#title-5} ==================
切片语法能够很好的对序列容器进行范围元素的操作,比如:字符串、列表、元组,但是对于非序列容器 set 和 dict 则无效。
切片的语法格式:
- 语法格式: my_str[start:end:step]
- step 正数表示从左向右 start 留空默认为0 end 留空默认为序列长度
- step 负数表示从右向左 start 表示-1 end 表示最后一个元素小1的位置
- 注意: 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])
对列表、元组使用切片的语法和字符串是相同的,这里不再额外举例,感兴趣的同学可以自行尝试。