python 列表排序去重求集
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'}
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/python-sorted-set/6147.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.