切片
对有序序列中取指定范围索引的操作,python 提供了切片(slice)操作符,语法:list[start,end,seq]
元组 tuple ,字符串 str 也支持切片操作
if __name__ == '__main__':
# 生成一个列表
ints = [i for i in range(0, 20)]
# 获取索引为 [0,10) 的元素
# 索引为 0 时可以省略不写
print(ints[:10]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 获取倒数第一个元素
print(ints[-1]) # 19
# 获取倒数的三个元素
print(ints[-3:]) # [17, 18, 19]
# 获取 [-3,-1) 的元素
print(ints[-3:-1]) # [17, 18]
# 获取前5个数
print(ints[:5])
# 获取后5个数
print(ints[-5:])
# 每隔2个取一个
print(ints[::2])
# 原样复制
new_list = ints[:]
迭代
python中,list、tuple、str、dict 都可以通过 for 循环进行遍历,称为迭代
enumerate():可以将序列变成“索引-元素对”,这样在 for 循环中同时迭代索引和元素本身
if __name__ == '__main__':
# 遍历list:带索引
names = ['Bob', 'Lily', 'Candy']
for index, val in enumerate(names):
print("index:%s \t value:%s" % (index, val))
# 遍历元组tuple:带索引
names = ('Bob', 'Lily', 'Cindy')
for index, val in enumerate(names):
print("index:%s \t value:%s" % (index, val))
# 遍历字符串str
names = '世界,您好'
for index, val in enumerate(names):
print("index:%s \t value:%s" % (index, val))
# 遍历 dict
names = {"name": "Bob", "age": 18}
for key in names: # dict 默认迭代的是 key
print(key)
for val in names.values(): # 遍历 dict 的value
print(val)
for key, val in names.items(): # 同时遍历key和value
print(key, val)
判断一个对象是否是可迭代对象:collections 模块的 Iterable 类型 ```python from collections import Iterable
l = [] b = isinstance(l , Iterable) # 判断 l 是否是可迭代对象
在遍历时可以进行解包操作:
```python
if __name__ == '__main__':
names = [(2, 3, 4), (1, 2, 3)]
for x, y, z in names:
print(x, y, z)
# 输出
2 3 4
1 2 3
列表生成器
列表生成器,List Comprehensions,是 python 内置的非常简单却强大的可以用来创建 list 的生成器
>>> list(range(1,11,2))
[1, 3, 5, 7, 9]
>>> [x * x for x in range(1,11,2)]
[1, 9, 25, 49, 81]
# 对for循环中生成 x 的只进行判断:if在for语句后面,属于筛选条件,所以不可以加 else
>>> [x * x for x in range(1,11,2) if x % 3 == 0]
[9, 81]
# for循环前面是一个表达式,属于根据 x 计算出一个结果,所以必须加 else 语句
>>> [x * x if x % 2 == 0 else 2 * x for x in range(20) if x > 10]
[22, 144, 26, 196, 30, 256, 34, 324, 38]
# 解释:for x in range(20) if x > 10 先是获得一个range(20)的序列,然后筛选其中大于10的
# x * x if x % 2 == 0 else 2 * x 从后面获得的序列中如果为偶数,则为x的平方;否则为2x