Python十大列表操作技巧
文章目录
列表展开
降维
分块
转置
查找众数
判断重复元素
比较元素差异
比较列表计算后的差异
为列表添加索引
回文
列表展开
对于形如[1, [2], [[3], 4], 5]的列表,将其展开为[1,2,3,4,5]。算法思路为,遍历列表A0中的元素,如果该元素A1仍为列表,则将A1的元素追加到A0的末尾。
def flatten(lst):
i = 0
while(i<len(lst)):
if isinstance(lst[i],list):
lst.extend(lst[i])
i += 1
return [n for n in lst if not isinstance(n,list)]
>>> lst = [1, [2], [[3], 4], 5]
>>> flatten(lst)
[1, 5, 2, 4, 3]
降维
当列表中的所有数据均为列表时,可以通过单星号索引之后,用itertools中的chain函数进行拼接。
>>> from itertools import chain
>>> a = [[1, 2], [3, 4], [5, 6]]
>>> chain(*a)
[1, 2, 3, 4, 5, 6]
分块
python内置了map函数,可以遍历列表并对每个元素进行映射。对于list(map(func,myList)),等价于[func(e) for e in myList]。根据这个特性,可以对列表进行分块。
from math import ceil #ceil为向上取整
def chunkByFor(lst, size):
return [lst[x*size:x*size+size]
for x in range(0,ceil(len(lst)/size))]
def chunkByMap(lst, size):
return list(
map(lambda x: lst[x * size:x * size + size],
list(range(0, ceil(len(lst) / size)))))
chunk([1,2,3,4,5],2) # [[1,2],[3,4],5]
转置
zip可以像拉链一样将数组中对应的值缝合起来,以元组的形式重新存储。根据这个特性,可完成列表的"转置"。
>>> lst = [[1,2], [3,4], [5,6]]
>>> list(zip(*lst))
[(1, 3, 5), (2, 4, 6)]
查找众数
list封装了count方法,可以统计其中的元素个数,例如
>>> lst = [1,2,1,2,3,2,1,4,2]
>>> lst.count(1)
3 #即lst中1出现了3次
而最大值选取函数max中有一个参数key,表示选取最大值的依据,例如
>>> x = [-2,-1,0,1,2]
>>> def test(x): return x**2-2*x
...
>>> max(x,key=test)
-2
表示选出当函数test值最大时的自变量。
根据这两个特点,可以得到查找列表中出现次数最多元素的方法为
>>> lst = [1,2,3,4,5,2,3,2,1,2,4]
>>> max(set(lst),key=lst.count)
2
判断重复元素
借助set中元素不重复的特性,可以检验非set数据中是否有重复数据。
def isUnique(lst):
return len(lst) == len(set(lst))
>>>x = [1,2,3,4,5,5]
>>>y = [1,2,3,4,5]
>>>isUnique(x)
False
>>>isUnique(y)
True
比较元素差异
在python中,集合set提供了类似做差的操作difference。对于集合A和B而言,若想实现A-B的功能,可采取A.difference(B)的方案。
对于其他数据结构,可先转为set再行做差。且difference会自动将输入变量转为set。
>>> A = [1,2,3]
>>> B = [1,2,4]
>>> list(set(A).difference(B))
[3]
比较列表计算后的差异
现有一函数func,对于两组数据A和B,如果希望得到func(A)和func(B)的差别,也可以采用set的特性。
def funcMinus(A, B, func):
B = set(map(func, B)) #剔除func(B)中的重复元素
return [a for a in A if fn(a) not in B]
筛选数据
filter是python的内置函数,用于过滤不符合条件的数据。list(filter(func,myList))等价于[e for e in myList if func(e)==1]。
为列表添加索引
enumerate可以将列表、元组等组合为索引序列,并可以声明初始值,例如
>>> orders = ['first','second','third']
>>> list(enumerate(orders))
[(0, 'first'), (1, 'second'), (2, 'third')]
>>> list(enumerate(orders,2))
[(2, 'first'), (3, 'second'), (4, 'third')]
>>>
这可以非常方便地应用到for循环中
>>> for i,val in enumerate(orders,1):
... print(i,val)
...
1 first
2 second
3 third
回文
在python中,对列表或者字符串采用:进行索引,例如a:b指的是从a到b的数据;当采用双引号::时,引号间的值的意义就发生了变化,例如a:b:c表示从a到b,间隔为c的数据。
据此,可以得到::-1表示将字符串颠倒过来,据此可以判断一个字符串是否为回文结构
>>> s = "abcde"
>>> s[::-1]
'edcba'
>>> s == s[::-1]
False
版权声明:本文为CSDN博主「微小冷」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37816922/article/details/128756170
列表展开
降维
分块
转置
查找众数
判断重复元素
比较元素差异
比较列表计算后的差异
为列表添加索引
回文
列表展开
对于形如[1, [2], [[3], 4], 5]的列表,将其展开为[1,2,3,4,5]。算法思路为,遍历列表A0中的元素,如果该元素A1仍为列表,则将A1的元素追加到A0的末尾。
def flatten(lst):
i = 0
while(i<len(lst)):
if isinstance(lst[i],list):
lst.extend(lst[i])
i += 1
return [n for n in lst if not isinstance(n,list)]
>>> lst = [1, [2], [[3], 4], 5]
>>> flatten(lst)
[1, 5, 2, 4, 3]
降维
当列表中的所有数据均为列表时,可以通过单星号索引之后,用itertools中的chain函数进行拼接。
>>> from itertools import chain
>>> a = [[1, 2], [3, 4], [5, 6]]
>>> chain(*a)
[1, 2, 3, 4, 5, 6]
python内置了map函数,可以遍历列表并对每个元素进行映射。对于list(map(func,myList)),等价于[func(e) for e in myList]。根据这个特性,可以对列表进行分块。
from math import ceil #ceil为向上取整
def chunkByFor(lst, size):
return [lst[x*size:x*size+size]
for x in range(0,ceil(len(lst)/size))]
def chunkByMap(lst, size):
return list(
map(lambda x: lst[x * size:x * size + size],
list(range(0, ceil(len(lst) / size)))))
chunk([1,2,3,4,5],2) # [[1,2],[3,4],5]
转置
zip可以像拉链一样将数组中对应的值缝合起来,以元组的形式重新存储。根据这个特性,可完成列表的"转置"。
>>> lst = [[1,2], [3,4], [5,6]]
>>> list(zip(*lst))
[(1, 3, 5), (2, 4, 6)]
查找众数
list封装了count方法,可以统计其中的元素个数,例如
>>> lst = [1,2,1,2,3,2,1,4,2]
>>> lst.count(1)
3 #即lst中1出现了3次
而最大值选取函数max中有一个参数key,表示选取最大值的依据,例如
>>> x = [-2,-1,0,1,2]
>>> def test(x): return x**2-2*x
...
>>> max(x,key=test)
-2
表示选出当函数test值最大时的自变量。
根据这两个特点,可以得到查找列表中出现次数最多元素的方法为
>>> lst = [1,2,3,4,5,2,3,2,1,2,4]
>>> max(set(lst),key=lst.count)
2
判断重复元素
借助set中元素不重复的特性,可以检验非set数据中是否有重复数据。
def isUnique(lst):
return len(lst) == len(set(lst))
>>>x = [1,2,3,4,5,5]
>>>y = [1,2,3,4,5]
>>>isUnique(x)
False
>>>isUnique(y)
True
比较元素差异
在python中,集合set提供了类似做差的操作difference。对于集合A和B而言,若想实现A-B的功能,可采取A.difference(B)的方案。
对于其他数据结构,可先转为set再行做差。且difference会自动将输入变量转为set。
>>> A = [1,2,3]
>>> B = [1,2,4]
>>> list(set(A).difference(B))
[3]
比较列表计算后的差异
现有一函数func,对于两组数据A和B,如果希望得到func(A)和func(B)的差别,也可以采用set的特性。
def funcMinus(A, B, func):
B = set(map(func, B)) #剔除func(B)中的重复元素
return [a for a in A if fn(a) not in B]
筛选数据
filter是python的内置函数,用于过滤不符合条件的数据。list(filter(func,myList))等价于[e for e in myList if func(e)==1]。
为列表添加索引
enumerate可以将列表、元组等组合为索引序列,并可以声明初始值,例如
>>> orders = ['first','second','third']
>>> list(enumerate(orders))
[(0, 'first'), (1, 'second'), (2, 'third')]
>>> list(enumerate(orders,2))
[(2, 'first'), (3, 'second'), (4, 'third')]
>>>
>>> for i,val in enumerate(orders,1):
... print(i,val)
...
1 first
2 second
3 third
在python中,对列表或者字符串采用:进行索引,例如a:b指的是从a到b的数据;当采用双引号::时,引号间的值的意义就发生了变化,例如a:b:c表示从a到b,间隔为c的数据。
据此,可以得到::-1表示将字符串颠倒过来,据此可以判断一个字符串是否为回文结构
>>> s = "abcde"
>>> s[::-1]
'edcba'
>>> s == s[::-1]
False
原文链接:https://blog.csdn.net/m0_37816922/article/details/128756170
本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com