python 序列的逆序

2021-10-06 23:51:06 字數 2336 閱讀 4030

一般for迴圈中總會用到range函式來進行順序遍歷,同樣的,range也能表示序列的逆序。

range(start, end, step)中,start 表示序列的起始索引(預設為0),end 表示終止索引,step 表示移動步長(預設為1)。由於range函式是「顧頭不顧尾」 的形式,因此實際上其遍歷的索引終止位置是 end 的前乙個索引。

比如:

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 設為負值即可。

比如:

list

(range(5

,1,-

1))=

[5,4

,3,2

]list

(range(5

,-2,

2))=

[5,3

,1,-

1]

這樣,在for迴圈中既可以實現順序遍歷,也可以進行逆序遍歷。

在 python3 中,reversed函式也能夠逆轉列表。

其實,在 python2.7 中就存在內建函式reverse可以用來翻轉列表,不過在 python3 中已經刪去該函式。

相比於reverse函式只能反轉列表,reversed函式則可以翻轉多種序列,包括tuple、list、string、range等型別。

由於reversed函式實際上是乙個類,因此其直接輸出的是對應序列值反轉後的迭代器,需要由對應型別的方法獲取反轉後的值。

比如:

# 列表反轉

a =[1,

2,3,

4,5]

print

(reversed

(a))

# 輸出:

print

(list

(reversed

(a))

)# 輸出:[5, 4, 3, 2, 1]

# 元組反轉

a =(1,

2,3,

4,5)

print

(reversed

(a))

# 輸出:

print

(tuple

(reversed

(a))

)# 輸出:(5, 4, 3, 2, 1)

# 字串反轉

a ='12345'

print

(reversed

(a))

# 輸出:

print

(str

(reversed

(a))

)# 輸出:

print(""

.join(

reversed

(a))

)# 輸出:54321

注意

list、tuple、range 型別均可相互轉換,但str型別不同;

str型別反轉序列輸出採用"".join(reversed(string)))方法,即將反轉序列按順序新增進新的字串序列中。

不過,reversed函式只能對已有序列做完全反轉,若只是想對序列其中一部分進行反轉,需要先擷取對應序列再反轉,也可以用range函式遍歷所需部分序列。

除了以上兩種方法外,對於字串序列,還可以用切片反轉方法進行反轉。

比如:

a =

'hello world'

print(""

.join(

reversed

(a))

)# 輸出:dlrow olleh

print

(a[::-

1])# 輸出:dlrow olleh

print

(a[::-

2])# 輸出:drwolh

求序列的逆序數

在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。即,在陣列中,若0 a j 就說明這兩個數是逆序對,乙個陣列中逆序對數量就是逆序數。第一種思路 用兩個for迴圈解決,用第乙個迴圈i從陣列開頭開始,另乙個迴圈...

求序列逆序數

由1,2,n 組成的乙個有序陣列稱為乙個n級排列。在乙個排列中如果一對數的前後位置與大小順 序相反,即大數排在小數的前面,則稱它們為乙個逆序。乙個排列中所有逆序的總和稱為該排列的逆序數。那麼,如何求解乙個序列的逆序數呢?暴力法是問題解的最簡單的方法,下面給出核心 int inversionnumbe...

求序列逆序數

求序列逆序數 整體思路是用到分治的思想,其實該問題可以在歸併排序過程中解決,因此該題 只需要在歸併排序 上增加乙個變數記錄逆序數即可,但正如那個修機器的故事一樣,換釘子不難,但知道在 換釘子卻是非常關鍵。如下,只是在歸併排序的基礎上增加了乙個記錄逆序數的地方 void reverse int num...