Python 切片和生成式

Python 提供了对容器元素构建和操作的两个便捷语法,分别是:

  1. 生成式语法:构造容器元素
  2. 切片语法:容器元素选择

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])

对列表、元组使用切片的语法和字符串是相同的,这里不再额外举例,感兴趣的同学可以自行尝试。

未经允许不得转载:一亩三分地 » Python 切片和生成式
评论 (0)

3 + 1 =