python十大特性包_10.Python(高级特性)

一.切片

1,取一个列表的前三个元素

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']print(L[0:3])

1940467-20201004153928868-181588417.png

L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。

如果第一个是索引0,还可以省略。L[:3]

2.倒数切片

1940467-20201004154111300-381363777.png

倒数第一个元素的索引是-1

3.例子

L = list(range(100))print("前十个数",L[:10])print("后十个数",L[-10:])print("前11到20个数",L[10:20])print("前十个数,每两个取一个",L[:10:2])print("所有数,每5个取一个",L[::5])

1940467-20201004154704816-1459675742.png

4.tuple也是一种list,唯一区别的是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

1940467-20201004154830855-949224228.png

5.字符串也可以看成一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

1940467-20201004154947611-1409990957.png

6.练习,利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:

第一种方法:

deftrim(s):if s =='':returnselse:while s!='' and s[0]==' ':

s=s[1:]while s!='' and s[-1]==' ':

s=s[:-1]returnsprint(trim("sss"))

第二种方法:使用递归

deftrim(s):if s == '':returnselif s[0] == ' ':return trim(s[1:])elif s[-1] == ' ':return trim(s[:-1])else:returnsprint(trim("sss"))

二、迭代

1、如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

可以看出,Python的for循环抽象程度要高于C的for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。

2、list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:

1940467-20201004161938943-466256314.png

因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。

1940467-20201004164805421-925152475.png

3.由于字符串也是可迭代对象,因此,也可以作用于for循环:

1940467-20201004162043415-1632707175.png

4、判断一个对象是都是可迭代对象,方法是通过collections模块的Iterable类型判断:

1940467-20201004162212186-254728192.png

5、Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

1940467-20201004162437324-238834906.png

6、上面的for循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:

1940467-20201004162554414-1433457709.png

7.使用迭代查找一个list中最小和最大值,并返回一个tuple

deffindMinAndMax(L):

max=L[0]

min=L[0]for i inL:if i>max :

max=ielif i

min=ireturnmax, min

L=[1,2,3,5,8,9,0]print(findMinAndMax(L))

三、列表生成器

1、列表生成器,要生成的元素放到前面,后面跟上for循环,就可以把list创建出来

要生成[1x1, 2x2, 3x3, ..., 10x10]

1940467-20201004164413691-1036026233.png

2、for循环后面还而已加上if判断,这样可以筛选出仅偶数的平方

1940467-20201004164526125-985768254.png

还可以使用两层循环

1940467-20201004164602314-160470970.png

3、for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value。因此,列表生成式也可以使用两个变量来生成list:

1940467-20201004164942455-1345464948.png

4、把一个list中所有的字符串变成小写

1940467-20201004165044698-1567587639.png

四、生成器

练习

1940467-20201005204524431-2030187902.png

deftriangles():

l= [1]whileTrue:yieldl

l= [0]+l+[0] #首尾加0,用于边界的计算

l = [l[i]+l[i+1] for i in range(len(l)-1)]#l[i]+l[i+1] 前一个值和后一个值相加计算出下一个值

#for i in range(len(l)-1) 循环获取生成的索引值

#range(len(l)-1) 获得l的全部索引值,因为计算方式是当前值和后一个值相加,避免尾部越界所以要减一

n=0

results=[]for t intriangles():

results.append(t)

n= n + 1

if n == 10:break

for t in results:

print(t)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值