python list列表的排序和去重是python里比较基础的内容。本篇写的目的不过是更新一些旧的用法。而求集这个其实也不算复杂,在数学概念里经常有求交集、并集和合集的概念,这里总结下使用python函数的实现方法。

一、python list排排序

很长一段时间我印象里的python sort,直接使用的是列表的sort属性,比如你有一个列表l1,你使用帮助信息查看时,会看到如下内容:

1sort(...)
2    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
3    cmp(x, y) -> -1, 0, 1

直接l1.sort() 就ok了,不过近期在写一段python代码时,发现该指令不生效了。执行后返回的结果是None 。

1>>>> l1 = ['a', 'd', 'c','1']
2>>> l = l1.sort()
3>>> print l
4None

查看发现python多了一个sorted函数,执行结果如下:

1>>> sorted(l1)
2['1', 'a', 'c', 'd']
1同样增加列表里字符串的前度也是有效的
2
3>>> l1 = ['2008-01-25', '2008-02-01', '2008-01-22','2012-11-02']
4>>> l1.sort()
5>>> sorted(l1)
6['2008-01-22', '2008-01-25', '2008-02-01', '2012-11-02']

二、列表去重

这个之前我也有记录 python 列表去重 ,这个是没有任何变化的,还是使用set函数。这部分略过。

三、求集

求集常用的有并集(union)、交集(intersection)和差集(difference)。集合的内置方法如下:

方法 描述
add() 为集合添加元素
clear() 移除集合中的所有元素
copy() 拷贝一个集合
difference() 返回多个集合的差集
difference_update() 移除集合中的元素,该元素在指定的集合也存在。
discard() 删除集合中指定的元素
intersection() 返回集合的交集
intersection_update() 返回集合的交集。
isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset() 判断指定集合是否为该方法参数集合的子集。
issuperset() 判断该方法的参数集合是否为指定集合的子集
pop() 随机移除元素
remove() 移除指定元素
symmetric_difference() 返回两个集合中不重复的元素集合。
symmetric_difference_update() 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union() 返回两个集合的并集
update() 给集合添加元素
1示例如下
2>>> l1 = ['2008-02-15', '2008-02-22', '2008-04-30']
3>>> l2 = ['2008-01-25', '2008-02-22', '2008-02-22']
4>>> set(l1).intersection(set(l2))
5{'2008-02-22'}

这个返回的结果是一个set类型,可以通过外面再加list转换为列表。

注:intersection 和 intersection_update的区别是,前者会生成一个新的set或list,后者会在原有list的基础上进行更新。

其实除了下面提到的复杂用法外,其还支持使用 & | - 符号进行处理,还是上面的示例:

1>>> l1 = ['2008-02-15', '2008-02-22', '2008-04-30']
2>>> l2 = ['2008-01-25', '2008-02-22', '2008-02-22']
3>>> set(l1) & set(l2)
4{'2008-02-22'}