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']
全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳  yidao,试用期 6 个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 评论 收藏
分享
小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务