Python十大列表操作技巧分享

 更新时间:2024年01月28日 11:49:29   作者:微小冷  
这篇文章给大家介绍了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)]

查找众数

列表中封装了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可将列表转换为集合,如果转换之后元素个数不变,则说明列表中没有重复元素。

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。对于集合AB而言,若想实现A-B的功能,可采取A.difference(B)的方案。

对于其他数据结构,可先转为set再行做差。且difference会自动将输入变量转为set

A = [1,2,3]
B = [1,2,4]
list(set(A).difference(B))	# [3]

比较列表计算后的差异

现有一函数func,对于两组数据AB,如果希望得到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

到此这篇关于Python十大列表操作技巧分享的文章就介绍到这了,更多相关Python列表操作技巧内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python利用高阶函数实现剪枝函数

    python利用高阶函数实现剪枝函数

    这篇文章主要为大家详细介绍了python利用高阶函数实现剪枝函数的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python的Pandas时序数据详解

    Python的Pandas时序数据详解

    这篇文章主要为大家详细介绍了Pandas时序数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Python决策树和随机森林算法实例详解

    Python决策树和随机森林算法实例详解

    这篇文章主要介绍了Python决策树和随机森林算法,集合实例形式详细分析了决策树和随机森林算法的概念、原理及Python相关实现技巧与注意事项,需要的朋友可以参考下
    2018-01-01
  • Python爬虫之使用MongoDB存储数据的实现

    Python爬虫之使用MongoDB存储数据的实现

    本文主要介绍了Python爬虫之使用MongoDB存储数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Python使用pyecharts控件绘制图表

    Python使用pyecharts控件绘制图表

    这篇文章介绍了Python使用pyecharts控件绘制图表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Python 实现购物商城,含有用户入口和商家入口的示例

    Python 实现购物商城,含有用户入口和商家入口的示例

    下面小编就为大家带来一篇Python 实现购物商城,含有用户入口和商家入口的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Python 实现打印单词的菱形字符图案

    Python 实现打印单词的菱形字符图案

    这篇文章主要介绍了Python 实现打印单词的菱形字符图案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python内置类型性能分析过程实例

    Python内置类型性能分析过程实例

    这篇文章主要介绍了Python内置类型性能分析过程实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 详解Python3 定义一个跨越多行的字符串的多种方法

    详解Python3 定义一个跨越多行的字符串的多种方法

    这篇文章主要介绍了详解Python3 定义一个跨越多行的字符串的多种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • OpenCV-Python实现轮廓检测实例分析

    OpenCV-Python实现轮廓检测实例分析

    这篇文章主要介绍了OpenCV-Python实现轮廓检测实例分析,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论