Python已看PythonPython必知必会系列

python必知必会3

2022-03-01  本文已影响0人  Nefelibatas

如何求两个列表的交集、差集、并集?

求交集: list(set(a) & set(b))
求差集: list(set(a) - set(b))
求并集: list(set(a) | set(b))

一般情况下,你输出的数据类型应该与原始的数据类型保持一致,这也是为什么我最后都做了一次list强制转换。

集合的创建有两种形式:
使用花括号,用逗号分隔元素, {'Bob', 'John'}
使用set构造器,构造器中传入一个可迭代对象。
集合对象是一种无序的集合数据类型,它是可迭代的,可变的,并且没有重复的元素。所以,我们可以利用集合去实现列表去重。

在 Python 里面,集合类型主要指的是集合set和冻结集合frozenSet,它们的主要区别在于:前者是可变的,后者是不可变的。集合主要有以下几种用途:

数学中的集合类计算,例如交集、并集、差集与对称差集等等。如给定两个集合 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,则每个列表元素将按反向顺序比较进行排序。

注意使用列表排序方法的时候,它是直接作用于列表本身,不会返回一个新的列表

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]])
上一篇下一篇

猜你喜欢

热点阅读