1. 切片
- 作用:取一个 list 或 tuple 的部分元素
# eg:取 list 和 tuple 的部分元素(取前 3 个元素)
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
# 方法一:
r = []
for i in range(3):
r.append(L[i])
print(r)
# 方法二:切片(Slice)操作符:L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。
print(L[0:3])
print(L[-2:]) # ['Bob', 'Jack']
print(L[-2:-1]) # ['Bob']
# 所有数,每5个取一个:L[::5]
# 前10个数,每两个取一个:L[:10:2]
- tuple 其实也是一种 list ,不同的是 tuple 是不可变的,所以 tuple 切片后仍是一个 tuple
>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'
- 举例:利用切片操作,实现一个trim()函数,去除字符串首尾的空格
def trim(s):
while s[:1] == ' ':
s = s[1:]
while s[-1:] == ' ':
s = s[:-1]
return s
2. 迭代
- 作用:用来遍历 list或tuple(如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代),类似 java 中的增强 for 循环
Collection <String> c=new ArrayList <String>();
c.add("zfliu");
c.add("HelloWorld");
for(String x : c) {
System.out.println(x);
}
- python 中的迭代可以用到任何可迭代对象上,无论该对象是否有下标
# 1、对 dict 进行迭代
d1 = {'Tom': 10, 'Bob': 12, 'Kiwi': 2}
# 对 key 进行迭代
for key in d1:
print(key)
# Tom
# Bob
# Kiwi
# 对 key 和 val 进行迭代
for key, val in d1.items():
print(key, '-->', val)
# Tom --> 10
# Bob --> 12
# Kiwi --> 2
# 2、对 str 进行迭代
for ch in 'ABC':
print(ch)
# A
# B
# C
# 3、同时引用两个变量
for x, y in [(1, 2), (4, 5)]:
print(x, y)
# 1 2
# 4 5
# 4、对 list 实现下标和元素循环
for x, y in enumerate(['A', 'B', 'C']):
print(x, y)
# 0 A
# 1 B
# 2 C
- python 通过 isinstance(数据,Iterable) 来判断该对象是否为迭代对象
- 请使用迭代查找一个list中最小和最大值,并返回一个tuple:
def findMinAndMax(L):
def findMinAndMax(L):
if len(L) == 0: # 当list为空时返回空值
return (None, None)
max = min = L[0] # 初始化最大值,最小值为list第一个数
for n in L:
if n > max:
max = n
if n < min:
min = n
return (min, max)
3. 列表生成式
- 作用:Python内置的非常简单却强大的可以用来创建list的生成式
- 举例
# 1、生成 [1x1, 2x2, 3x3, ..., 10x10]
# 生成[1x1, 2x2, 3x3, ..., 10x10]
# 方法一
L = []
for x in range(1, 11):
L.append(x * x)
print(L)
# 方法二:掌握
print([x * x for x in range(1, 11)]) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 2、for 后面加 if
# 输出 [1x1, 2x2, 3x3, ..., 10x10] 的全部偶数
print([x * x for x in range(1, 11) if x % 2 == 0]) # [4, 16, 36, 64, 100]
# 两层循环实现全排列
print([m + n for m in 'ABC' for n in 'XYZ'])
# ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
# 3、if ... else(加在 for 前面)
print([x if x % 2 == 0 else -x for x in range(1, 11)])
# [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
- 使用列表生成式将 L1 中的字符串变成小写,非字符串删除
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [x.lower() for x in L1 if isinstance(x, str)]
print(L2)
# ['hello', 'world', 'apple']
4. 生成器
参照文档:https://www.cnblogs.com/liangmingshen/p/9706181.html
5. 迭代器
参照文档:https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640
参考文档:https://www.liaoxuefeng.com/wiki/1016959663602400/1017269809315232