目标:代码越少越好
1.切片
1).功能:直接选择list或tuple中的子元素。
2).优点:代替循环,减少代码量
3).实现:list[首元素位置:尾元素位置:间隔选择数],tuple(首元素位置:尾元素位置:间隔选择数),list[1,2,3,4,5]
- 首元素位置:需要选择的首元素索引值,当从0开始时可忽略即,list[:尾元素位置:间隔选择数]
- 尾元素位置:需要选择的尾元素索引值,实际选择不包括尾元素索引值即,list[1:4],一共选择4-1=3个元素,2,3,4
- 间隔选择数:格几个选择一个元素,例如,list[::2],结果为1,3,5,其中list[:]表示选择全部元素
>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>> L[0:3] ['Michael', 'Sarah', 'Tracy',]
>>> L[-2:] #也可以倒着索引 倒数第一个索引为-1 ['Bob', 'Jack'] >>> L[-2:-1] ['Bob']
>>> L[::2] #选择索引值为偶数的
['Michael', 'Tracy','Jack']
2.迭代
1).定义:如果给定一个list或tuple,通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)
2).优点:没有索引也可以迭代,list、tuple、dict、set都可以,连字符串也行
3).实现:
- list: 迭代值和索引均可,和tuple、set类似
>>> list = ['A', 'B', 'C']
>>> for value in list:
... print(value)
...
A
B
C
>>> for i, value in enumerate(['A', 'B', 'C']): #实现下标循环 ... print(i, value) ... 0 A 1 B 2 C
- dict:迭代key、value均可。key:for key in d,value:for value in d.values(),同时迭代key和value:for k, v in d.items()
>>> d = {'a': 1, 'b': 2, 'c': 3} >>> for key in d: ... print(key) ... a c b
- 判断是否可迭代:通过collections模块的Iterable类型判断:
>>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整数是否可迭代 False
3.列表生成式
1).功能:可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁
2).实现:条件循环和多层循环
- 条件循环:要生成的元素
x * x
放到前面,后面跟for
循环,循环后面加if判断 if和x*x都可以省#转成小写字母
>>> L = ['Hello', 'World', 'IBM', 'Apple'] >>> [s.lower() for s in L] ['hello', 'world', 'ibm', 'apple']
# -*- coding: utf-8 -*-
L1 = ['Hello', 'World', 18, 'Apple', None] #非全是字母,可根据isinstance判断
L2 = [s.lower() for s in L1 if isinstance(s,str)]
# 测试:
print(L2)
if L2 == ['hello', 'world', 'apple']:
print('测试通过!')
else:
print('测试失败!')>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] 列表生成式 #等价于下面代码 >>> L = [] >>> for x in range(1, 11): ... if x%2 == 0 ... L.append(x * x) ... >>> L [4, 16, 36, 64, 100] >>> L = ['Hello', 'World', 'IBM', 'Apple'] >>> [s.lower() for s in L] ['hello', 'world', 'ibm', 'apple']
多层循环: 可以实现多层循环,也可以循环多个变量
#两层循环,实现全排列
>>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' } >>> [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C']
4.生成器
1).定义:当生成很多元素时,列表生成式占用空间大,如果仅仅需要访问前几个元素,后面的空间就浪费了,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
2).优点:减少空间占用,节约空间。
3).实现: