-
2020-07-13 21:49:04
对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> L[-2:] ['Bart', 'Paul'] >>> L[:-2] ['Adam', 'Lisa'] >>> L[-3:-1] ['Lisa', 'Bart'] >>> L[-4:-1:2] ['Adam', 'Bart']
记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。
更多相关内容 -
python 将一个数组倒序输出及将一个数字倒序输出
2020-07-14 09:00:32python 将一个数组倒序输出及将一个数字倒序输出将一个数组倒序输出:将一个数字倒序输出: 将一个数组倒序输出: a = [1, 2, 3, 4, 5] print(a) l = len(a) for i in range(0, l): print(a[l-i-1]) 输出: [1, 2,...python 将一个数组倒序输出及将一个数字倒序输出
将一个数组倒序输出:
a = [1, 2, 3, 4, 5] print(a) l = len(a) for i in range(0, l): print(a[l-i-1])
输出:
[1, 2, 3, 4, 5] 5 4 3 2 1
将一个数字倒序输出:
a = int(input('please input a number:')) b = 0 while a > 0: b = a % 10 a = a // 10 print(a, b)
输出:
please input a number:12345 1234 5 123 4 12 3 1 2 0 1
-
Python数组变形(学习笔记)
2022-02-01 08:30:24Python数组变形1.reshape2.flatten3.ravel4.stack(1)concatenate(2)vstack(3)dstack(4)hstack(5)r,c模式5.split(1)split(2)vsplit和hsplit6.repeat(1)标量参数(2)列表参数7.tile(1)标量参数(2...Python数组变形
1.reshape
reshape
是重塑,常用的三种写法如下:numpy.arange(n).reshape(a, b) # 依次生成 n个自然数,并且以 a行 b列的数组形式显示
numpy.arange(a,b,c) # 从数字 a起, 步长为 c, 到 b结束,生成 array
numpy.arange(a,b,c).reshape(m,n) # 将array的维度变为 m 行 n 列。
例一:
import numpy as np arr=np.arange(1,25.0).reshape(4,6)
关于order:
order可以是数组排序的方向不同
(1)order='F'
列为主序
(2)order='C'
行为主序一种是以
order='F'
的方式让数组竖着排序:arr=np.arange(1,25.0).reshape((6,-1),order='F')
一种是以order='C'
的方式让数组横着排序:arr=np.arange(1,25.0).reshape((6,-1),order='C')
reshape
与flattern
:
前者完成的是从低维到高维的转换,后者则相反,还可以使用reval
函数2.flatten
numpy.ndarray.flattern()是用来返回一维数组的函数。
也可以像reshape一样使用orderarr2=arr.flatten(order='F')
一般默认是使用order='C'
,有特定需求则使用order='F'
。
且flatten()
返回的是拷贝,意味着改变元素的值不会影响原始数组。
3.ravel
ravel()
方法将数组维度拉成一维数组ravel
和flatten
的区别:- ravel在进行扁平化处理的时候没有复制原来的数组,只在列主序打平时复制原来的数组
- flatten在所有情况下打平时都复制了原来的数组
- ravel()返回的是视图,意味着改变元素的值会影响原始数组;
- flatten()返回的是拷贝,意味着改变元素的值不会影响原始数组。
- 相同点:这两个函数的功能都是将多维数组转换成一维
ravel()返回的是视图,意味着改变元素的值会影响原始数组;
4.stack
numpy.stack(arrays, axis=0)
:沿着新轴连接数组的序列。一系列的
stack
函数有:stack(),hstack(),vstack()
(1)concatenate
还有属性例如:
concatenate
numpy.concatenate((a1,a2,…), axis=0)
函数,能够一次完成多个数组的拼接。其中a1,a2,…是数组类型的参数arr1=['穿过寒冬拥抱你','反贪风暴5:最终章','李茂扮太子','误杀2'] arr2=['以年为单位的恋爱','爱情神话','黑客帝国:矩阵重启','雄狮少年'] np.concatenate([arr1,arr2])
注意,两个list合并的时候需要用到[ ]
,否则出错。
axis
参数指定新轴在结果尺寸中的索引。例如,如果axis=0,它将是第一个维度,如果axis=-1,它将是最后一个维度。默认情况下
axis=0
arr1=np.arange(1,25.0).reshape(4,6) arr2=np.arange(26,50.0).reshape(4,6) np.concatenate([arr1,arr2],axis=1) np.concatenate([arr1,arr2],axis=0)
如上图所示,axis=1
是将不同的列串联起来,axis=0
则类似于append,是合并。将arr1与arr2进行对调:
(2)vstack
函数原型:
vstack(tup)
,参数tup
可以是元组,列表,或者numpy
数组,返回结果为numpy的数组。它是垂直(按照行顺序)的把数组给堆叠起来。vstack 和concatenate( ),axis=0等价
(3)dstack
dstack
是deep stack,即在深度方向进行合并。dstack可以将一维数组变成三维数组。
import numpy as np # vstack np.vstack([arr1,arr2]) #结果: array([[ 1., 2., 3., 4., 5., 6.], [ 7., 8., 9., 10., 11., 12.], [13., 14., 15., 16., 17., 18.], [19., 20., 21., 22., 23., 24.], [26., 27., 28., 29., 30., 31.], [32., 33., 34., 35., 36., 37.], [38., 39., 40., 41., 42., 43.], [44., 45., 46., 47., 48., 49.]]) # dstack np.dstack([arr1,arr2]) # 结果: array([[[ 1., 26.], [ 2., 27.], [ 3., 28.], [ 4., 29.], [ 5., 30.], [ 6., 31.]], [[ 7., 32.], [ 8., 33.], [ 9., 34.], [10., 35.], [11., 36.], [12., 37.]], [[13., 38.], [14., 39.], [15., 40.], [16., 41.], [17., 42.], [18., 43.]], [[19., 44.], [20., 45.], [21., 46.], [22., 47.], [23., 48.], [24., 49.]]])
(4)hstack
函数原型:
hstack(tup)
,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组,水平(按列顺序)把数组给堆叠起来,vstack()函数正好和它相反。
(5)r,c模式
np.r_[arr1,arr2] ,实际上是vstack 与 axis=0 做了一个合并(concatenate)。
np.c_[arr1,arr2] , hstack 与 axis=1 做了一个合并(concatenate)。
print(np.r_[-2:2:1,[0]*3,5,6])
上面那段代码由三部分组成,-2:2:1表示从-2~2的数字,间隔为1,并且2没有,然后是3个0,接下来是5和6
print((np.r_['r',-2:2:1,[0]*3,5,6])) #二维数组,以行的方式呈现 print((np.r_['c',-2:2:1,[0]*3,5,6])) #二维数组,以列的方式呈现
默认是为r,表示沿着行的方向创建,c则表示以列的方式创建。注:
shape
表示矩阵的维度大小。
也可以用'a,b,c'
来进行表示,a
代表轴,沿着轴a来进行合并,代表合并后数组维度至少是b
,c
是代表在第c维度上做维度提升print(np.r_['0,2,0',[1,2,3],[4,5,6]],'\n') print(np.r_['0,2,1',[1,2,3],[4,5,6]],'\n') print(np.r_['1,2,0',[1,2,3],[4,5,6]],'\n') print(np.r_['1,2,1',[1,2,3],[4,5,6]])
b:合并后数组的维度 a=0,沿着轴0合并。(3,)-->(1,3) a=1,沿着轴1合并。(3,1)-->(3,2) c=0,在轴0上上升一维,(3,)-->(3,1) c=1,在轴1上上升一维,(3,)-->(1,3)
5.split
(1)split
split 具体有 split() , hsplit() , vsplit()
arr1=np.arange(1,13.0).reshape(2,6) arr2=np.arange(14,26.0).reshape(2,6) arr=np.concatenate([arr1,arr2]) arr3=np.split(arr,2) # 默认情况下是 axis=0
由上图可知,split分割成为二维数组arr4=np.split(arr,3,axis=1) print(arr4[0].shape) arr4
arr5=np.split(arr,4,axis=0) arr6=np.split(arr,[1,2,3],axis=0)
上述代码块的两行表示是相同的,第二行相当于使用数组的切片方式进行处理。
(2)vsplit和hsplit
vsplit
垂直(按行)将阵列拆分为多个子阵列。hsplit
水平(按列)将阵列拆分为多个子阵列。
这部分希望大家看下图体会~
arrv=np.vsplit(arr,[1,2,3,4]) arrh=np.hsplit(arr,[1,2,3,4,5])
6.repeat
repeat()
: 复制数组中的每个指定元素。
一维数组:用整数型和列表型参考来控制元素被复制的个数
多维数组:用整数型和列表型来控制元素被复制的个数import numpy as np arr=np.arange(3) print(arr.shape)
(1)标量参数
print(arr.repeat(3)) # 每个元素复制三次
(2)列表参数
print(arr) print(arr.repeat([1,2,3])) # 第一个没有复制,第二个复制了两个,,依次类推
当列表的元素少于数组元素,或者多余数组元素,都会报错,就如下图所示。上面是一维数组的,接下来再看看二维数组中利用标量参数和轴参数:
print(arr.repeat(2)) # 此时二维数组变成一维的了 print(arr.repeat(2,1)) print(arr.repeat(2,axis=0)) # 在行上面进行复制
再来看看二维数组中的列表参数和轴参数:
7.tile
关于repeat和title,二者的本质都是复制,而repeat是在元素层面进行赋值,title是在数组层面进行赋值。
(1)标量参数
print(np.tile(arr,2)) print(np.repeat(arr,2))
(2)元组参数
元组参数即括号里面用相关参数进行分割。
print(np.tile(arr,(2,3)))
print(np.tile(arr,(2,3,4)))
在轴0上面复制两遍,行复制3遍,列复制4遍。
8.sort
排序分为:
- 直接排序
- 间接排序
直接排序
sort()
:在原来的数组上进行排序操作,而不重新创建一个数组(1)一维数组排序方法
arr=np.array([9,1,5,7,2,3,8,6]) # 先创建一个无序数组 arr
print('排序之前的数组:',arr) arr.sort() print('排序之后的数组:',arr)
arr[::-1] # 使用倒序的方法显示
(2)多维数组排序方法
先使用
random
随机生成一个二维数组:(每次)import numpy as np np.random.seed(1000) arr=np.random.randint(40,size=(3,4)) arr
以上的方法在每次重新刷新了之后会变化数组的数字。
如果对二维数组直接使用
arr.sort()
,则会直接对行进行排序。
对列进行排序:print('排序之前的数组:') print(arr) arr[:,0].sort() print('排序之后的数组:') print(arr)
np.sort(arr[:,2]) # 选择第三列进行排序
arr.sort(axis=1) # 横着排序,原来数组改变 np.sort(arr,axis=1) # 横着排序,但原来的数组不会改变 arr.sort(axis=0) # 竖着排序,原来数组改变 np.sort(arr,axis=0) # 竖着排序,但原来的数组不会改变
(3)argsort函数
接下来看看间接排序:
间接排序:利用特定的参数进行排序,按需排序,需要使用
argsort( )
函数
argsort
函数:返回的是数组值从小到大的索引值。score=np.array([100,65,76,89,58]) idx=score.argsort() idx
因此如果打印数组的时候带上下标就相当于排序了:print(score[idx]) # 利用索引标签来打印
arr[:,arr[0].argsort()] #按第一行从低到高进行排序,并且对应的列也会跟着变化 arr#由于使用的是argsort,因此原数组不会改变
(4)lexsort函数
numpy.lexsort()
用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。
arr1=np.array(['E','B','C','A','D']) arr2=np.array(['4','1','3','2','5']) idx=np.lexsort((arr1,arr2))
9.insert
insert
是插入,但原数组不会改变。arr=np.arange(6) np.insert(arr,1,100) # 在下标为1的位置插入100
arr1=np.insert(arr,1,100) arr1
10.delete
delete
是删除,但原数组同样不会改变。arr=np.arange(6) np.delete(arr,1) np.delete(arr,[1,2])
11.copy
关于
copy
和view
,这里需要了解一下数组切片和列表切片的区别:- 数组切片得到的是原数组的一个view(视图),修改切片中的内容会改变原来数组
- 列表切片得到的是原列表的一个copy(复制),修改切片后的列表不会改变原列表
arr=np.arange(6) arr_copy=arr.copy() arr_copy[0]=100 arr_copy
12.view
arr=np.arange(6) arr_view=arr.view() arr_view[0]=100 arr_view
讲了以上12种数组变形,那么如何使用容器型数据的特性和数组相关函数的方法对字符串或者其他对象进行去重呢?
s='数组切片得到的是原数组的一个,修改切片中的内容会改变原来数组'
假设现在要对s进行去重:
方法一:使用set
sets=set(s)
方法二:使用uniquesarr=np.array(s) np.unique(list(s))
-
Python列表倒序输出及其效率详解
2020-12-05 20:52:38Python列表倒序输出及其效率方法一使用Python内置函数reversed()for i in reversed(arr): passreversed返回的是迭代器,所以不用担心内存问题。方法二使用range()倒序for i in range(len(arr) - 1, -1, -1): pass...Python列表倒序输出及其效率
方法一
使用Python内置函数reversed()
for i in reversed(arr): pass
reversed返回的是迭代器,所以不用担心内存问题。
方法二
使用range()倒序
for i in range(len(arr) - 1, -1, -1): pass
方法三
先使用list自带的reverse()函数,再用range()循环
arr.reverse()
for i in range(len(arr)): pass
因为要先倒序,再循环,所以效率会比较低。
方法四
先使用list自带的sort()函数来倒序,再用range()循环
arr.sort(reverse=True)
for i in range(len(arr)): pass
因为要先排序,再循环,所以效率会比较低。
这里不讨论Python内置函数sorted(),它的效率比list自带的sort()函数要慢。
效率
对比代码
import time
arr = [x for x in range(10000000)]
arr1 = arr.copy()
start = time.process_time()
for i in reversed(arr): pass
end = time.process_time()
print('方法一(reversed):', end - start)
start = time.process_time()
for i in range(len(arr) - 1, -1, -1): pass
end = time.process_time()
print('方法二(range倒序):', end - start)
start = time.process_time()
arr.reverse()
for i in range(len(arr)): pass
end = time.process_time()
print('方法三(先reverse再range):', end - start)
start = time.process_time()
arr1.sort(reverse=True)
for i in range(len(arr1)): pass
end = time.process_time()
print('方法四(先sort再range):', end - start)
对比结果
数组长度为一百万时(跑了三次):
数组长度为一千万时(跑了两次):
数组长度为一亿时(跑了两次):
结论
效率:方法一 > 方法二 > 方法三 > 方法四
然而并不差多少emmm
但还是尽量使用迭代器吧,数据量很大的时候不用迭代器的话有可能会占用过多的内存。
到此这篇关于Python列表倒序输出及其效率详解的文章就介绍到这了,更多相关Python列表倒序输出及其效率内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客!
-
【Python】在numpy中让一位数组倒序/逆序排列
2020-03-11 15:41:00做数学作业的时候有一个题要判断图序列,里面要求是将数组从大到小排列。我搜了很多文件都只有从小到大排列的,在看了好多博客以后终于总结出了一个简单的方法。 在python自带的函数里,可以用d.sort(reverse=True)... -
python如何(倒序)逆序排列字符串数组
2021-01-12 00:40:421、数组倒序:原始元素的倒序排列(1)切片>>>arr=[1,2,3,4,3,4]>>>print(arr[::-1])[4,3,4,3,2,1](2)reverse()>>>arr=[1,2,3,4,3,4]>>>arr.reverse()>>>print(arr)[4,3... -
python排序倒序
2020-12-18 10:59:18Python编程中常用的12种基础知识Python编程中常用的12种基础知识,其中肯定有你不会的!1、正则表达式替换目标: 将字符串line中的 overview.gif 替换成其他字符串2、遍历目录方法在某些时候,我们需要遍历某个目录找... -
c语言怎么用数组倒序输出
2021-05-19 08:08:03scanf("%d",&a[i]);//倒序输出数组内容for( int *ptr=a+SIZE; ptr!=a; )printf( "%d\t",*(--ptr) );...Q6:c语言 数组倒序输出一列数修改了下: #includevoid main() { int a[5],i,t; for(i=0;i<... -
Python倒序循环列表(序列)
2021-09-27 10:50:311.如果要倒序遍历访问序列中的元素,可以对该序列使用reversed() 函数,reversed函数会生成一份倒序列表的拷贝,但是不会改变原列表。这个函数理解起来很自然,例如 for i in reversed(list),示例代码: >>... -
python 倒序遍历-三种方法
2021-06-26 09:20:31a = [1,3,6,8,9] print("通过下标逆序遍历1:") for i in a[::-1]: print(i, end=" ") print("\n通过下标逆序遍历2:") for i in range(len(a)-1,-1,-1): print(a[i], end=" ") print("\n通过reversed逆序遍历:")... -
Python在数组内实现逆序输出
2021-12-19 00:56:40print("请分别输入10个数字") a=[] for i in range(10): ...print("原数组为:",a) for j in range(len(a)//2): #将10个字组从中间分开 a[j],a[N-j-1]=a[N-j-1],a[j] #前后颠倒 print("逆序输出为:”,a) ... -
python如何逆序输出数组
2021-01-14 14:10:56详细内容今天就为大家分享一篇python实现将一个数组逆序输出的方法,具有很好的参考价值,希望对大家有所帮助。方法一:(推荐学习:Python视频教程)使用for循环从数组最大值开始遍历,每打印出一个值,数组最大值减... -
【列表倒序】详解python列表倒序的几种方法(切片、reverse()、reversed())
2022-06-30 10:35:45【列表倒序】详解python列表倒序的几种方法(切片、reverse()、reversed()) -
Numpy 一维数组的倒序
2021-12-02 22:47:48代码: # 方法一: import numpy as np a = np.array([1,2,3,4,5,6]) b = a[::-1] print(b) ...D:\Anaconda3\python.exe D:/0_me_python/03.py [6 5 4 3 2 1] [6 5 4 3 2 1] Process finished with e... -
python怎样逆序输出数组?
2021-02-03 21:49:33python怎样逆序输出数组?发布时间:2020-05-13 10:57:54来源:亿速云阅读:267作者:Leah今天小编就为大家带来一篇python是怎样逆序输出数组的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看... -
python 中倒序切片
2020-12-03 14:02:58楼主问的是列表,及Python中所有可迭代类型类型的 切片问题, 由于我电脑上装的是Python 3.x, 在 range() 这个内建函数上和泪珠的2.x 有些许差别:2.x: range(start : stop : step) 生成 一个 从start开始(包含... -
python中字符串数组逆序排列方法总结
2020-12-03 01:43:53下面给大家介绍几种方法:1、数组倒序:原始元素的倒序排列(1)切片>>> arr = [1,2,3,4,3,4]>>> print (arr[::-1])[4, 3, 4, 3, 2, 1](2)reverse()>>> arr = [1,2,3,4,3,4]>>> ... -
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2020-09-20 15:06:41下面小编就为大家分享一篇Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
python实现将一个数组逆序输出的方法
2020-12-18 01:52:39python实现将一个数组逆序输出的方法方法一:def printTheReverseArray(self):list_1 = [1, 2, 3, 4, 5, 6, 7]length = len(list_1)for i in range(0, length):print(length - i,end="")方法二:def ... -
python数组,字典的一些操作
2020-12-04 06:19:39新手刚刚开始学习python,如果有写错或写的不好的地方,请大家多多指教!在python中输出当前系统import sysprint(sys.platform)输出当前在那个目录import osos.getcwd()输出一个变量有多少位s = 'spam'len(s)替换变量... -
[python随笔]python数组切片操作
2020-12-03 00:15:57python的数组切片操作很强大,但有些细节老是忘,故写一点东西记录下来。在python&numpy中切片(slice)对于一维数组来说,python的list和numpy的array切片操作都是相似的。无非记住arr[start:end:step]即可下面是... -
Golang实现字符串倒序的几种解决方案
2020-12-26 10:34:19本文主要给大家介绍了关于Golang实现字符串倒序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 字符串倒置如下: Hello World –> dlroW olleH 解决方案1: length := len(str) ... -
使用python倒序删除列表中的特定元素
2022-07-23 22:10:26python列表中数据的倒序删除思想 -
python倒序排列方法梳理
2018-08-06 14:42:041、数组倒序: 原始元素的倒序排列 arr = [1,2,3,4,3,4] (1)print arr[::-1] ---->[4, 3, 4, 3, 2, 1] (2)arr.reverse() print arr ---->[4, 3, 4, 3, 2, 1] (3)reversed(arr) #返回一个倒序... -
python数组使用(超级全面)
2019-04-18 19:43:461、Python的数组分三种类型: (1) list 普通的链表,初始化后可以通过特定方法动态增加元素。 定义方式:arr = [元素] (2) Tuple 固定的数组,一旦定义后,其元素个数是不能再改变的。 定义方式:arr = (元素) (2) ... -
python数组的操作(访问)
2021-07-08 19:47:20#Python 自带的list print('==========python自带的list集合===========') list1 = list(range(20)) print(list1) list2 = list1[1:10:2]#从开始下标1开始截取,下标到10结束 间隔2个 print(list2) #从1取到尾间隔... -
python 初始化数组以及倒序遍历 以及背包问题
2013-08-08 11:22:00为什么80%的码农都做不了架构师?>>> ... -
python 几个倒叙方法
2022-05-18 01:25:18利用range生成倒序索引 for i in range(10,-1,-1): print(i) 二.reversed 函数,它的作⽤就是倒序排列 for i in reversed(range(0,10)): print(i) 三.切片,生成副本 a = [1, 3, 7, 5, 2, 6] b = a[::-1] #... -
如何在python中倒序遍历数组
2017-05-09 15:11:30num = [5,9,10,23,89] for i in range(0, num.__len__())[::-1]: print num[i]