Python高级特性--切片+迭代+列表生成式
在Python中,代码不是越多越好,而是越少越好。代码不是越复杂越好,而是越简单越好。
1行代码能实现的功能,决不写5行代码。请始终牢记,代码越少,开发效率越高。
切片
#取list前三个数 list = ['A','B','C','D'] ans = [] for i in range(0,3): ans.append(list[i]) print(ans) print(list[0:3]) #L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。 #第一个索引是0,还可以省略 print(list[:3]) #可以从索引1开始,取出2个元素出来 print(list[1:3]) #Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片 #记住倒数第一个元素的索引是-1。 print(list[-4:])
tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
(1,2,3,4,5)[:3] => (1, 2 ,3 )
小结
在很多编程语言中,针对字符串提供了很多各种截取函数(例如,substring),其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。
#去除首尾之间的空格 def trim(s): while s[:1]==' ': s=s[1:] while s[-1:]==' ': s = s[:-1] return s;
迭代
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)
list = ['A','B','C','D'] for i in list: print(i)
Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。
#因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。 dic = {'A':1,'B':4,'C':3,'D':2,'H':1,'E':2,'O':2,'L':3} # 只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代: for i in dic: print(i) ''' A B C D H E O L ''' #迭代dic的值 #默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。 #字符串也是可迭代对象 :迭代string for i in 'ABC': print(i)
Python内置的enumerate函数可以把一个list变成索引-元素对
list = [1,2,3,4,5] for i,value in enumerate(list): print(i,value) ''' 0 1 1 2 2 3 3 4 4 5 ''' list = [(1, 1), (2, 4), (3, 9)] for i,value in list: print(i,value) ''' 1 1 2 4 3 9 这方法不适用于字典 '''
列表生成式
b = range(1, 11) print(b) # 结果 range(1, 11) print(type(b)) print(list(b)) # 转list #range(1, 11) # #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #生成[1x1, 2x2, 3x3, ..., 10x10] l = [] # 写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来 for x in range(1,11): l.append(x*x) print(l) #等同于 l=[ x*x for x in range(1,11)] # for 后面还可以加 if [x * x for x in range(1, 11) if x % 2 == 0] 不用“ :” 注意 print(l) #还可以使用两层循环,可以生成全排列 [m + n for m in 'ABC' for n in 'XYZ'] #['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'] ### os 系统的库 import os # 导入os模块,模块的概念后面讲到 l = [d for d in os.listdir('.')] # os.listdir可以列出文件和目录 print(l) # [d for d in os.listdir('.')] # os.listdir可以列出文件和目录
for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value: 然后现在可以迭代字典了
d = {'A':1,'B':2,'C':3,'D':4,'E':5} ''' for x , value in d: # 不适用于字典 print(x,value) # errors ''' for x , value in d.items(): #适用于字典 print(x,value) #也可生成列表 d = {'A':1,'B':2,'C':3,'D':4,'E':5} l = [ x+'='+str(y) for x , y in d.items()] # 这里的连接需要同类型的 需要类型转换 print(l)
L = ['Hello', 'World', 18, 'Apple', None] l = [x.lower() for x in L if isinstance(x,str)] print(l) #['hello', 'world', 'apple']