python序列
Posted 一口吃不成胖子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python序列相关的知识,希望对你有一定的参考价值。
类似于Java
和C
的数组,但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
才支持nextfrom 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)
-
map和reduce
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) ]
本文来自博客园,作者:一口吃不成胖子,转载请注明原文链接:https://www.cnblogs.com/JarryShu/p/17059195.html
以上是关于python序列的主要内容,如果未能解决你的问题,请参考以下文章