py知识点拾遗之sort(),sorted(),reverse(),reversed()
之前面试py web后端开发
被问到如何反转一个数据(?不知道如何表达)
想到了切片
示例:
>>> mystr = 'shiving2014' >>> mylist = ['s','h','i','v',2,0,1,4] >>> mytuple = ('s','h','i','v',2,0,1,4) >>> >>> mystr[::-1] '4102gnivihs' >>> mylist[::-1] [4, 1, 0, 2, 'v', 'i', 'h', 's'] >>> mytuple[::-1] (4, 1, 0, 2, 'v', 'i', 'h', 's') >>>
切片很灵活,所以意识半会也没想到其他什么内置函数,方法阿
当然面试也失败了- -!
回来后蕃薯看到了这些方法
sort(),sorted(),reverse(),reversed()
测试数据
# -*- coding:utf-8 -*- mystr = 'shiv2014' mylist = ['s','h','i','v',2,0,1,4] mytuple = ('s','h','i','v',2,0,1,4)
总结一下用法
sort()是可变对象(字典、列表)的方法,无参数,无返回值,sort()会改变可变对象,因此无需返回值。sort()方法是可变对象独有的方法或者属性,而作为不可变对象如元组、字符串是不具有这些方法的,如果调用将会返回一个异常。
try: mystr.sort() print mystr except Exception, exp: print exp try: mylist.sort() print mylist except Exception, exp: print exp try: mytuple.sort() print mytuple except Exception, exp: print exp 'str' object has no attribute 'sort' [0, 1, 2, 4, 'h', 'i', 's', 'v'] 'tuple' object has no attribute 'sort' [Finished in 0.0s]
sorted()是python的内置函数,并不是可变对象(列表、字典)的特有方法,sorted()函数需要一个参数(参数可以是列表、字典、元组、字符串),无论传递什么参数,都将返回一个以列表为容器的返回值,如果是字典将返回键的列表。
try:
print sorted(mystr)
except Exception, exp:
print exp
try:
print sorted(mylist)
except Exception, exp:
print exp
try:
print sorted(mytuple)
except Exception, exp:
print exp ['0', '1', '2', '4', 'h', 'i', 's', 'v']
[0, 1, 2, 4, 'h', 'i', 's', 'v']
[0, 1, 2, 4, 'h', 'i', 's', 'v']
[Finished in 0.0s]
reverse()是可变对象(字典、列表)的方法,无参数,无返回值,sort()会改变可变对象,因此无需返回值。sort()方法是可变对象独有的方法或者属性,而作为不可变对象如元组、字符串是不具有这些方法的,如果调用将会返回一个异常。
try: print mystr.reverse() except Exception, exp: print exp try: mylist.reverse() print mylist except Exception, exp: print exp try: print mytuple.reverse() except Exception, exp: print exp 'str' object has no attribute 'reverse' [4, 1, 0, 2, 'v', 'i', 'h', 's'] 'tuple' object has no attribute 'reverse' [Finished in 0.0s]
reversed()是python的内置函数,并不是可变对象(列表、字典)的特有方法,reversed()函数需要一个参数(参数可以是列表、字典、元组、字符串),无论传递什么参数,都将返回一个迭代对象(iterator)。
try:
print reversed(mystr)
except Exception, exp:
print exp
try:
print reversed(mylist)
except Exception, exp:
print exp
try:
print reversed(mytuple)
except Exception, exp:
print exp
<reversed object at 0x7fe8bc7a5d10> <listreverseiterator object at 0x7fe8bc7a5d10> <reversed object at 0x7fe8bc7a5d10> [Finished in 0.0s]
接下来在说一下简单的说iterator只是提供一个接口,每次迭代可以产生一个值,到没有值为止
迭代方法
iter.next()
在for语句和list comprehension中,都是隐式调用了这个函数。所以可以直接
for obj in some_container:
pass
以mylist = ['s','h','i','v',2,0,1,4]为例
>>> mylist = ['s','h','i','v',2,0,1,4] >>> rlist = reversed(mylist) >>> rlist.next() 4 >>> rlist.next() 1 >>> rlist.next() 0 >>> rlist.next() 2 >>> for item in rlist: ... print item, ... v i h s >>>
结束
写了这么多感觉py很乱,具体的以后用到了再说吧。。。