Fork me on GitHub

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)
#<class 'range'>
#[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']
posted @ 2019-08-04 10:30  cznczai  阅读(263)  评论(0编辑  收藏  举报