python序列

Posted 一口吃不成胖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python序列相关的知识,希望对你有一定的参考价值。

类似于JavaC的数组,但python的”数组“可操作性更强,以下是常用API

  • insert 指定位置插入

    arr = [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]
    # 下标1位置后加入值,结果[0, 1, 81, 20, 3, 40, 5, 60, 7, 80, 9]
    arr.insert(1,81)
    
  • append 尾部添加

    arr = [ i for i in range(0, 10) ]
    # 尾部追加,结果[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    arr.append(10)
    
  • remove 移除序列内元素

    若remove中的元素在序列中不存在,则会报错

    arr = [ i for i in range(0, 10) ]
    # 移除2这个元素,结果是
    arr.remove(2)
    

    替代方案

    arr = [ i*10 for i in range(0, 10) ]
    # 按下标删除
    del arr[0]
    # 删除序列中全部数据
    arr.clear()
    
  • extend 尾部追加序列

    arr1 = [ i for i in range(1,10,2) ]
    arr2 = [ i for i in range(0,10,2) ]
    arr1.extend(arr2)
    
  • sort 排序

    arr = [ i for i in range(1,10,2) ]
    arr.sort(reverse=True) # 倒序
    arr.sort(reverse=False) # 升序(默认)
    
  • 附录

    • + 拼接

      多个序列用"+"号拼接

      arr1 = [1,2,3]
      arr2 = [4,5,6]
      arr3 = [7,8,9]
      # 结果是[1,2,3,4,5,6,7,8,9]
      arr4 = arr1 + arr2 + arr3
      
    • * 重复

      arr = [1,2,3]
      # 结果是[1,2,3,1,2,3,1,2,3]
      arr1 = arr*3
      
  • ⭐ 不支持 调用next迭代,只能通过for遍历;因为只有构造器中使用了yield才支持next

    from collections.abc import Iterable
    from typing import Iterator
    
    arr = [1,2,3,4,5]
    # false
    print(isinstance(arr1,Iterator))
    # true
    print(isinstance(arr1,Iterable))
    # 这句报错
    next(arr)
    
  • mapreduce

    python内建的map和reduce函数,可以更加方便得处理数组数据。map()接收2个参数,一个是函数,另一个是序列。map将序列中的数据带入函数中计算,然后返回。

    def f(x:int):
        return x*x
    maps= list( map(str,[i for i in range(1,8)]) )
    

    reduce接收2个参数,一个是函数,另一个是序列;必须是接受2个参数的函数,本次计算结果会被自动带入函数的第一个参数中,参与下一次计算。

    from functools import reduce
    
    def f1(x:int,y:int):
        return x + y
    # 计算1到10之和,结果45
    j = reduce(f1,[i for i in range(1,10)])
    
  • filter筛选序列

    filter接收2个参数,一个是函数,另一个是序列;必须是接收1个参数的函数,filter将返回true的结果过滤出并返回。

    def f(x):
        return x%2 == 0
    # 过滤0-20之间的偶数
    res = list( filter(f,[i for i in range(20)]) )
    
  • sorted 排序

    sorted可以接受一个key函数来实现自定义排序,reverse来定义是否颠倒序列。python提供的key值有

    arr=sorted([1,20,3,40,5,60],key=abs)
    arr=sorted([1,20,3,40,5,60],key=abs,reverse=True) # 颠倒
    
    # 自定义排序规则,如下:学生按成绩排序
    L = [(\'Bob\', 75), (\'Adam\', 92), (\'Bart\', 66), (\'Lisa\', 88)]
    def by_score(t):
        return t[1]
    L3 = sorted(L, key=by_score)
    

序列生成式

顾名思义,按规则生成序列,用以替代将一个一个的元素录入序列

# 这种写法很繁琐,一旦数据量过多(元素个数超过1个W),这样写显然不现实
arr = [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]
# 生成从0到9,共10个数,偶数乘10,奇数不变;结果:[0, 1, 20, 3, 40, 5, 60, 7, 80, 9]
arr = [ i*10 if i%2==0 else i for i in range(0, 10) ]
# 还有更加高阶玩法——多个for嵌套;打印结果如下:
# [\'10\', \'12\', \'14\', \'16\', \'18\', \'30\', \'32\', \'34\', \'36\', \'38\', \'50\', 
# \'52\', \'54\', \'56\', \'58\', \'70\', \'72\', \'74\', \'76\', \'78\', \'90\', \'92\', 
# \'94\', \'96\', \'98\', \'10\', \'12\', \'14\', \'16\', \'18\', \'30\', \'32\', # \'34\', 
# \'36\', \'38\', \'50\', \'52\', \'54\', \'56\', \'58\', \'70\', \'72\', \'74\', \'76\', 
# \'78\', \'90\', \'92\', \'94\', \'96\', \'98\']
arr = [ "%d%d"%(i,j) for i in range(1,10,2) for j in range(0,10,2)  ]

以上是关于python序列的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记:python序列

python学习之 -- 数据序列化

[Python学习]——序列——初识Python中的序列

python怎么生成10的幂次序列?

Python序列化之Json基础

Python之序列化和反序列化