python切片迭代_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']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值