python 序列的逆序

Python (156) 2023-06-01 15:09:25

python中实现序列逆序的方法

1. range 函数

2. reversed 函数

3. 其他方法

1. range 函数

一般for循环中总会用到range函数来进行顺序遍历,同样的,range也能表示序列的逆序。
range(start, end, step)中,start表示序列的起始索引(默认为0),end表示终止索引,step表示移动步长(默认为1)。由于range函数是“顾头不顾尾” 的形式,因此实际上其遍历的索引终止位置是end的前一个索引。
比如:

纯文本
复制到剪贴板
在新窗口中打开代码
EnlighterJS 3 Syntax Highlighter
list(range(5))=[0,1,2,3,4]
list(range(1,5))=[1,2,3,4]
list(range(1,5,1))=[1,2,3,4]
list(range(1,5,2))=[1,3]
list(range(5))=[0,1,2,3,4] list(range(1,5))=[1,2,3,4] list(range(1,5,1))=[1,2,3,4] list(range(1,5,2))=[1,3]
list(range(5))=[0,1,2,3,4]

list(range(1,5))=[1,2,3,4]

list(range(1,5,1))=[1,2,3,4]

list(range(1,5,2))=[1,3]

同理,逆序遍历只需将步长step设为负值即可。
比如:

纯文本
复制到剪贴板
在新窗口中打开代码
EnlighterJS 3 Syntax Highlighter
list(range(5,1,-1))=[5,4,3,2]
list(range(5,-2,2))=[5,3,1,-1]
list(range(5,1,-1))=[5,4,3,2] list(range(5,-2,2))=[5,3,1,-1]
list(range(5,1,-1))=[5,4,3,2]

list(range(5,-2,2))=[5,3,1,-1]

这样,在for循环中既可以实现顺序遍历,也可以进行逆序遍历。

2. reversed 函数

在 python3 中,reversed函数也能够逆转列表。
其实,在 python2.7 中就存在内置函数reverse可以用来翻转列表,不过在 python3 中已经删去该函数。
相比于reverse函数只能反转列表,reversed函数则可以翻转多种序列,包括tupleliststringrange等类型。
由于reversed函数实际上是一个类,因此其直接输出的是对应序列值反转后的迭代器,需要由对应类型的方法获取反转后的值。
比如:

纯文本
复制到剪贴板
在新窗口中打开代码
EnlighterJS 3 Syntax Highlighter
#列表反转
a=[1,2,3,4,5]
print(reversed(a))#输出:<list_reverseiteratorobjectat0x00000233F1C96588>
print(list(reversed(a)))#输出:[5,4,3,2,1]
#元组反转
a=(1,2,3,4,5)
print(reversed(a))#输出:<reversedobjectat0x000001FE9B3A6588>
print(tuple(reversed(a)))#输出:(5,4,3,2,1)
#字符串反转
a='12345'
print(reversed(a))#输出:<reversedobjectat0x000001FAD17E2438>
print(str(reversed(a)))#输出:<reversedobjectat0x000001FAD17E2438>
print("".join(reversed(a)))#输出:54321
#列表反转 a=[1,2,3,4,5] print(reversed(a))#输出:<list_reverseiteratorobjectat0x00000233F1C96588> print(list(reversed(a)))#输出:[5,4,3,2,1] #元组反转 a=(1,2,3,4,5) print(reversed(a))#输出:<reversedobjectat0x000001FE9B3A6588> print(tuple(reversed(a)))#输出:(5,4,3,2,1) #字符串反转 a='12345' print(reversed(a))#输出:<reversedobjectat0x000001FAD17E2438> print(str(reversed(a)))#输出:<reversedobjectat0x000001FAD17E2438> print("".join(reversed(a)))#输出:54321
#列表反转
a=[1,2,3,4,5]
print(reversed(a))#输出:<list_reverseiteratorobjectat0x00000233F1C96588>
print(list(reversed(a)))#输出:[5,4,3,2,1]
#元组反转
a=(1,2,3,4,5)
print(reversed(a))#输出:<reversedobjectat0x000001FE9B3A6588>
print(tuple(reversed(a)))#输出:(5,4,3,2,1)
#字符串反转
a='12345'
print(reversed(a))#输出:<reversedobjectat0x000001FAD17E2438>
print(str(reversed(a)))#输出:<reversedobjectat0x000001FAD17E2438>
print("".join(reversed(a)))#输出:54321

注意

  1. listtuplerange类型均可相互转换,但str类型不同;
  2. str类型反转序列输出采用"".join(reversed(string)))方法,即将反转序列按顺序添加进新的字符串序列中。

不过,reversed函数只能对已有序列做完全反转,若只是想对序列其中一部分进行反转,需要先截取对应序列再反转,也可以用range函数遍历所需部分序列。

3. 其他方法

除了以上两种方法外,对于字符串序列,还可以用切片反转方法进行反转。
比如:

纯文本
复制到剪贴板
在新窗口中打开代码
EnlighterJS 3 Syntax Highlighter
a='helloworld'
print("".join(reversed(a)))#输出:dlrowolleh
print(a[::-1])#输出:dlrowolleh
print(a[::-2])#输出:drwolh
a='helloworld' print("".join(reversed(a)))#输出:dlrowolleh print(a[::-1])#输出:dlrowolleh print(a[::-2])#输出:drwolh
a='helloworld'

print("".join(reversed(a)))#输出:dlrowolleh

print(a[::-1])#输出:dlrowolleh

print(a[::-2])#输出:drwolh

THE END

发表回复