python下的排序可以很方便的调用各种方法来解决。
另,由于字符串可以简单的转换成list,因此字符串排序也可以解决。
将字符串转换成list (http://piziyin.blog.51cto.com/2391349/568426)
>>> import string
>>> str = 'abcde'
>>> list = list(str)
>>> list
['a', 'b', 'c', 'd', 'e']
>>> str
'abcde'
>>> str_convert = ''.join(list)
>>> str_convert
'abcde'
>>>
但如果是最简单的字符串逆序,那么可以直接通过改变下标来实现。(http://hi.baidu.com/fishhatta/item/0767d518f78c381fe2f98650)
>>>str[::-1]
'edcba'
python中dict和list排序
1、list排序
列表的排序是python内置功能,自身含有sort方法
如:
>>> s=[2,1,3,0]
>>> s.sort()
[0, 1, 2, 3]
2、dict排序
对字典的排序,因为每一个项包括一个键值对,所以要选择可比较的键或值进行排序
sorted(iterable[, cmp[, key[, reverse]]]
cmp和key一般使用lambda
如:
>>> d={"ok":1,"no":2}
对字典按键排序,用元组列表的形式返回
>>> sorted(d.items, key=lambda d:d[0])
[('no', 2), ('ok', 1)]
对字典按值排序,用元组列表的形式返回
>>> sorted(d.items, key=lambda d:d[1])
[('ok', 1), ('no', 2)]
3、元组列表排序
如
>>> li=[(2,'a'),(4,'b'),(1,'d')]
>>> li.sort()
[(1, 'd'), (2, 'a'), (4, 'b')]
如果字典按项的第一个元素排序的话,可以转换成元组列表来进行
>>> d={"ok":1,"no":2}
>>> tt=[tuple(item) for item in d.items()]
>>> tt.sort()
[('no', 2), ('ok', 1)]
4 其他人的实现,留住备忘
下面是一个结构的例子
>>> class test:
def __init__(self,a,b):
self.a = a
self.b = b
>>> test1 = test(5,25)
>>> test2 = test(10,15)
>>> tests = [test1,test2]
>>> sorted(tests,cmp = lambda x,y: cmp(x.a, y.a))
>>> result = sorted(tests,key = lambda d:d.a)
5、
# (IMHO) the simplest approach:
def sortedDictValues1(adict):
items = adict.items()
items.sort()
return [value for key, value in items]
# an alternative implementation, which
# happens to run a bit faster for large
# dictionaries on my machine:
def sortedDictValues2(adict):
keys = adict.keys() keys.sort() return [dict[key] for key in keys]
# a further slight speed-up on my box
# is to map a bound-method:
def sortedDictValues3(adict):
keys = adict.keys()
keys.sort()
return map(adict.get, keys)
各种代码实现:
# sort.py
# 这个类用来演示如何对自定义对象进行排序
class Sortobj:
a = 0
b = ''
def __init__(self, a, b):
self.a = a
self.b = b
def printab(self):
print self.a, self.b
# 演示对字符串列表进行排序
samplelist_str = ['blue','allen','sophia','keen']
print samplelist_str
samplelist_str.sort()
print samplelist_str
print '\n'
# 演示对整型数进行排序
samplelist_int = [34,23,2,2333,45]
print samplelist_int
samplelist_int.sort()
print samplelist_int
print '\n'
# 演示对字典数据进行排序
sampledict_str = {'blue':'5555@sina.com',
'allen':'222@163.com',
'sophia':'4444@gmail.com',
'ceen':'blue@263.net'}
print sampledict_str
# 按照key进行排序
print sorted(sampledict_str.items(), key=lambda d: d[0])
# 按照value进行排序
print sorted(sampledict_str.items(), key=lambda d: d[1])
# 构建用于排序的类实例
obja = Sortobj(343, 'keen')
objb = Sortobj(56, 'blue')
objc = Sortobj(2, 'aba')
objd = Sortobj(89, 'iiii')
print '\n'
samplelist_obj = [obja, objb, objc, objd]
# 实例对象排序前
for obj in samplelist_obj:
obj.printab()
print '\n'
# 按照对象的a属性进行排序
samplelist_obj.sort(lambda x,y: cmp(x.a, y.a))
for obj in samplelist_obj:
obj.printab()
print '\n'
# 按照对象的b属性进行排序
samplelist_obj.sort(lambda x,y: cmp(x.b, y.b))
for obj in samplelist_obj:
obj.printab()
by 莫亚菜
python对容器内数据的排序有两种,一种是容器自己的sort函数,一种是内建的sorted函数。
sort函数和sorted函数唯一的不同是,sort是在容器内排序,sorted生成一个新的排好序的容器。
对于一个简单的数组 L=[5,2,3,1,4].
sort: L.sort()
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
iterable:待排序的可迭代类型的容器;
cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
key:用列表元素的某个已命名的属性或函数(只有一个参数并且返回一个用于排序的值)作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 或者 reverse = False,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。
如果是一个多维的列表 L=[(‘b’,2),(‘a’,1),(‘c’,3),(‘d’,4)].
有三种选择对这个多维列表进行排序
sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))
L.sort(cmp=lambda x,y:cmp(x[1],y[1]))
sorted(L, key=lambda x:x[1]);
L.sort(key=lambda x:x[1]);
以上几种排序均可加上参数reverse.
例如 sorted(reverse=True), L.sort(reverse=True). 或者改成False
OrderedDict是collections中的一个包,能够记录字典元素插入的顺序,常常和排序函数一起使用来生成一个排序的字典。
比如,比如一个无序的字典
d = {‘banana’:3,’apple’:4,’pear’:1,’orange’:2}
通过排序来生成一个有序的字典,有以下几种方式
collections.OrderedDict(sorted(d.items(),key = lambda t:t[0]))
或者
collections.OrderedDict(sorted(d.items(),key = lambda t:t[1]))
或者
collections.OrderedDict(sorted(d.items(),key = lambda t:len(t[0])))
- 附:python内置类型
- 1、list:列表(即动态数组,C++标准库的vector,但可含不同类型的元素于一个list中)
- a = ["I","you","he","she"] #元素可为任何类型。
-
- 下标:按下标读写,就当作数组处理
- 以0开始,有负下标的使用
- 0第一个元素,-1最后一个元素,
- -len第一个元素,len-1最后一个元素
- 取list的元素数量
- len(list)
-
- 创建连续的list
- L = range(1,5)
- L = range(1, 10, 2)
-
- list的方法
- L.append(var)
- L.insert(index,var)
- L.pop(var)
- L.remove(var)
- L.count(var)
- L.index(var)
- L.extend(list)
- L.sort()
- L.reverse()
- list 操作符:,+,*,关键字del
- a[1:]
- [1,2]+[3,4]
- [2]*4
- del L[1]
- del L[1:3]
- list的复制
- L1 = L
- L1 = L[:]
-
- list comprehension
- [ <expr1> for k in L if <expr2> ]
-
- 2、dictionary: 字典(即C++标准库的map)
- dict = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}
- 每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。
- 键是唯一的,字典只认最后一个赋的键值。
-
- dictionary的方法
- D.get(key, 0)
- D.has_key(key)
- D.keys()
- D.values()
- D.items()
-
- D.update(dict2)
- D.popitem()
- D.clear()
- D.copy()
- D.cmp(dict1,dict2)
-
-
- dictionary的复制
- dict1 = dict
- dict2=dict.copy()
-
- 3、tuple:元组(即常量数组)
- tuple = ('a', 'b', 'c', 'd', 'e')
- 可以用list的 [],:操作符提取元素。就是不能直接修改元素。
-
- 4、string: 字符串(即不能修改的字符list)
- str = "Hello My friend"
- 字符串是一个整体。如果你想直接修改字符串的某一部分,是不可能的。但我们能够读出字符串的某一部分。
- 子字符串的提取
- str[:6]
- 字符串包含判断操作符:in,not in
- "He" in str
- "she" not in str
-
- string模块,还提供了很多方法,如
- S.find(substring, [start [,end]])
- S.rfind(substring,[start [,end]])
- S.index(substring,[start [,end]])
- S.rindex(substring,[start [,end]])
- S.count(substring,[start [,end]])
-
- S.lowercase()
- S.capitalize()
- S.lower()
- S.upper()
- S.swapcase()
-
- S.split(str, ' ')
- S.join(list, ' ')
-
- 处理字符串的内置函数
- len(str)
- cmp("my friend", str)
- max('abcxyz')
- min('abcxyz')
-
- string的转换
-
- float(str)
- int(str)
- int(str,base)
- long(str)
- long(str,base)
-
- 字符串的格式化(注意其转义字符,大多如C语言的,略)
- str_format % (参数列表)
- >>>print ""%s's height is %dcm" % ("My brother", 180)
-
-
- 。。。。。。。。。。。。。。。。。。
-
- list 和 tuple 的相互转化
-
- tuple(ls)
- list(ls)
参考以下博客:
http://www.douban.com/note/13460891/
http://blog.youkuaiyun.com/songchunyi/article/details/6543369
http://blog.youkuaiyun.com/songchunyi/article/details/6543369
http://stqdd.com/archives/427
http://blog.youkuaiyun.com/business122/article/details/7536991