@Frankchen
2016-03-27T03:39:15.000000Z
字数 1755
阅读 1212
python
最简易的sort方式即是使用sorted(list)
函数,注意此函数返回一个排序好的新列表,原列表并未更改。
strs = ['aa', 'BB', 'zz', 'CC']
print sorted(strs) ## ['BB', 'CC', 'aa', 'zz'] (case sensitive)
print sorted(strs, reverse=True) ## ['zz', 'aa', 'CC', 'BB']
sorted
函数可以使用key函数来排序,如:
strs = ['ccc', 'aaaa', 'd', 'bb']
print sorted(strs, key=len) ## ['d', 'bb', 'ccc', 'aaaa']
key函数的机制是引用一个值并且返回一个代理值,这个代理值用来在排序过程中对各元素进行比较。
另一种场景如,强制排序大小写等同:
## "key" argument specifying str.lower function to use for sorting
print sorted(strs, key=str.lower) ## ['aa', 'BB', 'CC', 'zz']
你也可以自定义函数,进行任意的排序规则制定:
strs = ['xc', 'zb', 'yd' ,'wa']
## Write a little function that takes a string, and returns its last letter.
## This will be the key function (takes in 1 value, returns 1 value).
def MyFn(s):
return s[-1]
## Now pass key=MyFn to sorted() to sort by the last letter:
print sorted(strs, key=MyFn) ## ['wa', 'zb', 'xc', 'yd']
sort()
与sorted()
不同,它直接改变原列表没有返回值,并且它只作用于list,而后者可以在任意场景上使用。
alist.sort() ## correct
alist = blist.sort() ## NO incorrect, sort() returns None
Tuples和list相似,但是不能改变大小(其中元素可能改变值)。因此常用来作为返回多个值的函数的返回值的表现方式。例如,如果我需要一组三维坐标,自然的Python表现方式就是每个tuples是三维的装载一个(x,y,z)坐标。
tuple用括号封闭,各自方法和list相似:
tuple = (1, 2, 'hi')
print len(tuple) ## 3
print tuple[2] ## hi
tuple[2] = 'bye' ## NO, tuples cannot be changed
tuple = (1, 2, 'bye') ## this works
创建一维tuple必须使用逗号:
tuple = ('hi',) ## size-1 tuple
这是为了和tuple形式相区分。
(x, y, z) = (42, 13, "hike")
print z ## hike
(err_string, err_code) = Foo() ## Foo() returns a length-2 tuple
list内可以包含for-in
,如:
nums = [1, 2, 3, 4]
squares = [ n * n for n in nums ] ## [1, 4, 9, 16]
注意这里的for
不需要冒号。
另一个例子:
strs = ['hello', 'and', 'goodbye']
shouting = [ s.upper() + '!!!' for s in strs ]
## ['HELLO!!!', 'AND!!!', 'GOODBYE!!!']
甚至可以使用if
:
## Select values <= 2
nums = [2, 8, 1, 6]
small = [ n for n in nums if n <= 2 ] ## [2, 1]
## Select fruits containing 'a', change to upper case
fruits = ['apple', 'cherry', 'bannana', 'lemon']
afruits = [ s.upper() for s in fruits if 'a' in s ]
## ['APPLE', 'BANNANA']