python必知必会3
如何求两个列表的交集、差集、并集?
求交集: list(set(a) & set(b))
求差集: list(set(a) - set(b))
求并集: list(set(a) | set(b))
一般情况下,你输出的数据类型应该与原始的数据类型保持一致,这也是为什么我最后都做了一次list强制转换。
集合的创建有两种形式:
使用花括号,用逗号分隔元素, {'Bob', 'John'}
使用set构造器,构造器中传入一个可迭代对象。
集合对象是一种无序的集合数据类型,它是可迭代的,可变的,并且没有重复的元素。所以,我们可以利用集合去实现列表去重。
在 Python 里面,集合类型主要指的是集合set和冻结集合frozenSet,它们的主要区别在于:前者是可变的,后者是不可变的。集合主要有以下几种用途:
-
成员检测:和容器对象一样,也可以使用in去查看是否存在某个元素或某些元素。
-
从序列中去除重复项
数学中的集合类计算,例如交集、并集、差集与对称差集等等。如给定两个集合 a 和 b:
a | b 返回a,b的合集,该运算符等同于a.union(b)
a & b 返回a,b的交集,该运算符等同于a.intersection(b)
a - b 返回a,b的差集,该运算符等同于a.difference(b)
union,intersection,difference的参数都可以接受多个集合对象。
集合并不支持:索引,切片,或者其他序列对象的操作,因为集合并不是一个严格意义上的序列对象。
增加新的元素到集合中: a.add(el)
从集合中移除元素:a.remove(el),注意如果元素不存在会引发KeyError。安全的使用方法是a.discard(el),只删除存在的元素。
请按字典中的 Value 值进行排序
使用Python内置排序函数sorted
dict(sorted(d.items(), key=lambda x: x[1])) # 降序
dict(sorted(d.items(), key=lambda x: x[1], reverse=True)) # 升序
注意在Python3.6之后,字典的顺序会保持插入时的顺序,所以按上面的答案写是没有问题的。
但是Python3.6之前的版本没有这个特性,如果你对sorted()返回的一个不可变的有序元组对象再执行一次dict类型转换,Python会给出一个不一样的结果。
考虑是否需要返回dict对象。如果不需要,那最简单了,sorted(d.items(), key=lambda x: x[1])直接返回一个由元组组成的有序列表。
如果需要返回dict,就看Python版本了。如果是在Python3.6之后,直接类型强转,也没有问题;如果是在Python3.6之前,可能需要考虑用OrderedDict。
Python的常用排序方案
Python的常用排序方案:有两种 sort()
函数和sorted()
函数。
列表方法list.sort()
修改列表本身。
sort(*, key=None, reverse=False)
,两个可选参数,key
指定带有单个参数的函数,用于从列表的每个元素中提取用于比较的键。reverse
为一个布尔值。如果设为True
,则每个列表元素将按反向顺序比较进行排序。
注意使用列表排序方法的时候,它是直接作用于列表本身,不会返回一个新的列表。
- 内置函数
sorted()
可以从一个迭代对象构建返回一个新的排序列表。sorted(iterable, *, key=None, reverse=False)
,同样,也有两个可选参数。但是,这里的key
函数是从任意可迭代对象iterable
的每个元素中提取用于比较的键。reverse
的用法一样。
key一般都使用匿名函数或者内置函数
a = [3,2,5,1]
a.sort() # 打印a,输出为[1, 2, 3, 5]
names = ['Mark', 'Bob', 'Daniel', 'David']
names.sort(key=len) # 打印names,按字符串长度排序,输出为['Bob', 'Mark', 'David', 'Daniel']
s = "ajldjlajfdljfddd"
,去重并从小到大排序输出"adfjl"
直接将字符串 s 强制转为集合达到去重的目的,然后在强转为列表,使用sort() 方法进行排序,最后使用join()方法将排好序的列表拼接起来即可,如果你掌握了前两道题中的知识点,这道题可以说是非常的简单。
s = list(set(s)) # 第一步,去重
s.sort() # 第二步,排序
"".join(s) # 第三步,拼接
[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
使用序列的拼接,然后再去考虑如何归约,即把一系列值归约成一个。
答案
from functools import reduce
reduce(lambda x, y: x + y, [[1,2],[3,4],[5,6]])