可爱的 Python: Python 之优雅与瑕疵,第 1 部分
2008-09-30 12:57:47 来源:WEB开发网我编写了一个小程序来尝试排序各列表:
清单 5. 对各列表进行排序的结果
% python compare.py
(0) ['x', 'y', 'z', 1] --> [1, 'x', 'y', 'z']
(1) ['x', 'y', 'z', 1j] --> [1j, 'x', 'y', 'z']
(2) ['x', 'y', 'z', 1j, 1] --> exceptions.TypeError
(3) [0j, 1j, 2j] --> exceptions.TypeError
(4) [0j, 1, 2] --> exceptions.TypeError
(5) [0, 1, 2] --> [0, 1, 2]
(6) ['x', 'xf0'] --> ['x', 'xf0']
(7) ['x', 'xf0', 'x'] --> ['x', 'x', 'xf0']
(8) ['x', 'xf0', u'x'] --> exceptions.UnicodeDecodeError
(9) [u'a', 'b', 'xf0'] --> [u'a', 'b', 'xf0']
(10) ['xf0', u'a', 'b'] --> exceptions.UnicodeDecodeError
通过前面的解释,或多或少能够猜出一部分结果。但是,看一下 (9) 和 (10),这两个列表以不同次序包含完全相同的对象:由此可见,排序是否失败不但取决于列表中 对象的类型和值,还取决于 list.sort() 方法的特定实现!
修订比较
自 1.5.2 以来,Python 发展出了一种非常有用的数据类型:集(set),它最初是一个标准模块,后来成了一种内置类型(模块还包含一些额外的特性)。对于上面描述的许多问题,只需使用集来取代列表即可轻松地判断对象是在一个集合中、在另一个集合中还是同时存在于两个集合中,而不需要编写自己的 “list diff” 代码。例如:
更多精彩
赞助商链接