[Built-in Functions] - S

本文深入探讨了Python中序列的切片操作及其应用,并详细介绍了如何使用sorted函数进行高效排序,包括参数cmp、key及reverse的使用方法,以及静态方法在类中的应用。通过实例演示,帮助读者掌握Python中序列操作的核心技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[Built-in Functions] - S



setattr(object, name, value)

setattr(x, 'foobar', 123) 相当于 x.foobar=123。


slice(stop)

slice(start, stop[, step])

什么是切片?

字符串、列表、元组在python中都符合“序列”这一特征,只要符合这一特征的变量我们都可以用切片(slice)去存取它们的任意部分。我们可 以把序列想像成一个队列,我可能需要前面三位、后面三位、或从第三位后的四位、或隔一个取一个等,我们用切片操作符来实现上述要求。


切片操作符在python中的原型是 [start:stop:step] 即:[开始索引:结束索引:步长值]

开始索引:同其它语言一样,从0开始。序列从左向右方向中,第一个值的索引为0,最后一个为-1

结束索引:切片操作符将取到该索引为止,不包含该索引的值。

步长值:默认是一个接着一个切取,如果为2,则表示进行隔一取一操作。步长值为正时表示从左向右取,如果为负,则表示从右向左取。步长值不能为0。


li = [1,2,3,4,5,6,7]

print li[2]           #输出3,因为索引为2的值为3
print li[2:4]         #输出[3,4]。从索引2开始取,到索引为4的5为止(不含5)
print li[-1]          #输出7,反向取第一个
print li[-1:-5:2]     #输出空列表[],从反向第1个向反向第5个取,但步长为2,表示正向相隔二个取值。
print li[-1:-5:-2]    #输出[7,5]

有时我们可以省略开始索引、结束索引,如:

li = [1,2,3,4,5,6,7]

print li[1:]          #输出[2,3,4,5,6,7],省略终止索引,表示取起始索引之后的所有值,等效于li[1:len(li)]
print li[:3]          #输出[1,2,3],省略起始索引,表示从0开始取,等效于li[0:3]
print li[:]           #输出[1,2,3,4,5,6,7],省略起始索引、终止索引、步长值表示取全部,等效于li[0:len(li):1]
print li[::]          #输出[1,2,3,4,5,6,7],省略起始索引、终止索引、步长值表示取全部,等效于li[0:len(li):1]
print li[::-1]        #输出[7,6,5,4,3,2,1],省略起始索引、终止索引,步长值为-1,表示反向获取

所以,不要为str类没有substring方法而感到困惑,用切片操作符吧。


sorted(iterable[, cmp[, key[,reverse]]])

iterable:是可迭代类型;
cmp:用于比较的函数,比较什么由key决定;
key:用列表元素的某个属性或函数作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 或者 reverse = False 表示是否逆序。
返回值:是一个经过排序的可迭代类型,与iterable一样。

>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),] 
>>> sorted(students, cmp=lambda x,y : cmp(x[2], y[2]))  # sort by age  
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, key=lambda student : student[2])   # sort by age  
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, cmp=lambda x,y : x - y, key=lambda student : student[2])  # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]


staticmethod(function)

见 [基础] - Python中 @staticmethod 和 @classmethod


sum(iterable[, start])

sum是python中一个很实用的函数,但是要注意它的使用,我第一次用的时候,就把它这样用了:

s = sum(1,2,3)

结果就悲剧啦

其实sum()的参数是一个list

例如:

sum([1,2,3])

sum(range(1,11))


super(type[, object-or-type])

super是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。总之前人留下的经验就是:保持一致性。要不全部用类名调用父类,要不就全部用 super,不要一半一半。

class A(B):
    def method(self, arg):
        super(A, self).method(arg)


super(A, self)获取父类B的对象。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值