列表操作及兩種排序演算法

2021-10-09 14:05:31 字數 3514 閱讀 5637

1.獲取元素 列表名 [ 索引 ] list1 [ n ]

2.修改元素 列表名 [ 索引 ] = 值 list1 [ n ] = m

3.列表組合 list1 + list2 = list3

4.列表元素的重複 list1 * n

5.in , not in

6.切片 列表名 [ start : end : step ]

7.增追加多個元素,會將整個容器作為整體新增到列表中

extend ( ):擴充套件,列表.extend ( iterable ) 只能追加可迭代物件

當新增可迭代物件時,只會新增可迭代物件中的元素

insert ( ):插入,列表.insert ( index , object ) 在列表的指定索引處插入某個

指定的元素插入多個元素,直接插入容器本身

8.刪remove ( ):列表.remove ( object ) 直接移除元素

在列表中從左往右進行依次對比,只會移除第乙個匹配到的元素

pop ( ):列表.pop ( index ) 根據索引移除元素,如果index省略,則預設移除

列表中的最後乙個元素 pop ( )的返回值是被移除的那個元素

clear ( ):列表.clear ( ) 清空列表中的元素

del:del 列表 刪除列表

9.改reverse ( ):列表.reverse ( ) 反轉,將列表倒序輸出

sort ( ):列表.sort. ( key , reverse) 排序,預設為公升序

降序:list1.sort ( reverse = true) key:自定義排序規則

高階函式:sorted ( __iterable , key , severse )

10.查

len ( ):獲取列表的長度或者列表元素的個數

min ( ) / max ( ):獲取列表中元素的最大值或者最小值

count ( ):列表.count ( object ) 統計乙個元素在列表**現的次數

index ( ):列表.index ( object , start , end ) 獲取乙個元素在列表中第一次出現的索引

預設在整個列表中查詢,也可以指定查詢的區間

list ( x ):將可迭代物件轉換為列表

11.列表拷貝

列表.copy ( )

匯入模組 import copy

淺拷貝:copy.copy ( x )

列表.copy()和copy.copy():都可以被稱為淺拷貝,只拷貝列表的最外層

對於一維列表,乙個列表更改,另乙個列表不受影響

對於二維列表,乙個列表更改【最裡層的元素】,另乙個列表會隨著更改

深拷貝:copy.deepcopy ( x )

不管是幾維列表,其中乙個列表更改,對另乙個列表沒有任何影響

12.列表推導式/列表生成式

語法:[ 新列表中的元素規律 for迴圈 if判斷 ]

new_list = [ num for num in range ( ) ]

13.isinstance ( 變數 ,型別) 判斷指定的變數是指定的型別

14.簡單演算法

氣泡排序:比較兩個相鄰的下標對應的元素,如果符合條件就交換位置(最值出現在最後位)

list1 =[34

,54,6

,5,65

,100,4

,19,50

,3]#氣泡排序,以公升序為例

#外層迴圈:控制比較的輪數

for i in

range

(len

(list1)-1

):#內層迴圈:控制每一輪比較的次數,兼顧參與比較的下標

for j in

range

(len

(list1)-1

- i)

:#比較:只要符合條件則交換位置,

# 如果下標小的元素 > 下標大的元素,則交換位置

if list1[j]

< list1[j +1]

: list1[j]

,list1[j +1]

= list1[j +1]

,list1[j]

print

(list1)

選擇排序:固定乙個下標,然後拿這個下標對應的值依次和後面的元素進行比較,最值出現在頭角標位置上

list1 =[34

,54,6

,5,65

,100,4

,19,50

,3]# 選擇排序,以公升序為例

# 外層迴圈:控制比較的是輪數

for i in

range

(len

(list1)-1

):# 內層迴圈:控制每一輪比較的次數,兼顧參與比較的下標

for j in

range

(i +1,

len(list1)):

# 比較,交換

# 如果下標小的元素 > 下標大的元素,則交換位置

if list1[i]

> list1[j]

: list1[i]

,list1[j]

= list1[j]

,list1[i]

print

(list1)

另附:

二分法查詢:公升序的前提下,將待查詢的元素與中間下標對應的元素比較,如果大於中間下標對應的元素,則去右半部分查詢前提是列表是有序(公升序或者降序)的,通過折半來縮小查詢範圍,提高查詢效率

list1 =[45

,65,7

,67,100,5

,3,2

,5,35

]# 以公升序為例

list1.sort(

)# 待查詢元素

key =

66# 定義變數,表示索引的最大值和最小值

left =

0right =

len(list1)-1

# left和right會一直改變,在改變的過程中,直到left == right,還未找到指定元素,則說明該元素不存在

while left <= right:

# 計算中間下標

middle =

(left + right)//2

# 比較

if list1[middle]

< key:

# 重置left的值

left = middle +

1elif list1[middle]

> key:

# 重置right的值

right = middle -

1else

:print

("%d索引為:%d"

%(key,middle)

)# 如果查詢到,則可以提前結束迴圈

break

else

:print

("%d在列表中不存在"

%(key)

)

C C 排序演算法(一)氣泡排序及兩種優化

void bubblesort int arr,int length 演算法步驟 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元...

兩種常用的排序演算法

本文討論兩種著名且很有用的排序演算法 插入排序,快速排序。插入排序的思想與打牌起牌類似 每次從牌堆裡拿一張牌,插入到已經排好序的牌中。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,從該元素開始,從後向前掃瞄表 如果前乙個元素大於後乙個元素,則交換兩個元素的位置 重複...

快速排序的兩種演算法

假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。先將第乙個數當成基準數,然後以i,j當成哨兵分別指向陣列的首尾,第一次讓j先移動,移動到比基準數小的數字時停下,然後讓i移動至比基準數大的數字停下,交換arr i 和arr j 一直遍歷,知道i和j兩個哨兵相遇停止,然後...