大部分技巧在网上都能找到不少,这里列一些比较偏的了。
1.嵌套列表求和
ls = [('a',3),('b',10),('c',5),('d',2)]
print(sum(dict(ls).values())) # 转字典即可.
# ==> 20
2.合并两个列表,并去重。
a = [1,2,3]
b = [3,4,5]
c = set().union(a,b)
# ==> c :{1,2,3,4,5} # 再转list即可.
3.嵌套列表展平。
# 期望将:ls = [[1,2,3],[4,5,6],['a', 'b']] 转变为: [1, 2, 3, 4, 5, 6, 'a', 'b']
ls = [[1,2,3],[4,5,6],['a', 'b']]
# 通过sum函数可以将2层的嵌套列表进行展平。
ls2 = sum(ls,[])
# ls2 ==> [1, 2, 3, 4, 5, 6, 'a', 'b']
#类似的,元组也有该功能。
t1 = ((1,2,3),(4,5,6),(7,))
sum(t1,())
==>(1,2,3,4,5,6,7)
4.多层嵌套列表的展平。
sum只能展开一层,如果要展开多层,需要多次展开。
而且,如果层级不相同,展到某层完全展开之后,就会报错了。
因此,若要展开多层,且层级各不一样的嵌套列表,则需要借助一些库,深度展平的库 deepflatten。
这是一个第三方库,需要下载安装。
但是需要注意:pip install iteration_utilities 高版本python安装时会报错,我使用的3.10.5无法安装。因为这个功能也不常用,也不去解决了。
from iteration_utilities import deepflatten
# 仅仅嵌套列表.
ls = [[1,2,3],[4,5,[6,7]],[8,[9,[10,[11,12]]]]]
new_ls = list(deepflatten(ls))
print(new_ls)
==>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
# 嵌套元组,也能给你展平了.
ls = [[1,2,3],(2,3,[4,5,(6,(7,8))]),[8,[9,[10,[11,12]]]]]
new_ls = list(deepflatten(ls))
print(new_ls)
==>[1, 2, 3, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12]
5.查找字符/串是否在目标字符串内,并返回子串开始的索引。
ss = 'hello world'
# 查找world是否在ss内,并返回索引。
ss.find('world')
⇒ 6
6.字典根据键或值进行排序
思路:
1.排序使用内置函数sorted。
2.将每个键值对捆绑在一起,循环遍历。
dd = {'c':5,'a':3,'e':2,'d':6,'b':1,'f':4}
# 根据键值排序
# 参数解释:必要传一个迭代器,这里传入的是dd.items(),就是将每一个键值对组成一个元组,后面的key传入一个匿名函数,匿名函数针对每一个元组进行判断,x[0],就是键。x[1]是值。 因为:dd.items() 拿到的单个元组是这样的:('c',5)。
res = sorted(dd.items(),key=lambda x:x[0]) # sorted的返回值就是结果,在执行器里,也会直接打印结果。初学那会,我记得好像是没有返回值的。现在有了,也不错。
# ==> [('a', 3), ('b', 1), ('c', 5), ('d', 6), ('e', 2), ('f', 4)]
# 根据值进行排序
res2 = sorted(dd.items(),key=lambda x:x[1])
# ==> [('b', 1), ('e', 2), ('a', 3), ('f', 4), ('c', 5), ('d', 6)]
# sorted还有个可选参数,reverse,可以选择排序方式,默认是升序的(False),设置为Ture。结果如下:
res = sorted(dd.items(),key=lambda x:x[1],reverse=True)
# ==> [('d', 6), ('c', 5), ('f', 4), ('a', 3), ('e', 2), ('b', 1)]
7.字典嵌套多个同类型的子字典,循环取值。
源于看到知乎上一个提问,记录一下。直接看代码截图了。这里还是匿名函数和map函数的组合使用。感觉很方便。