『無為則無心』Python序列 — 18、Python列表概念及常用操作API

繁華似錦Fighting發表於2021-07-05

1、列表的概念

(1)列表的定義

  • 列表是Python中一種基本的資料結構。列表儲存的資料,我們稱為元素。在列表中的每個元素都會有一個下標來與之對應,第一個索引是0,第二個索引是1,依此類推的整數。
  • 列表裡可以同時儲存不同的資料型別,列表裡也可以巢狀列表(列表本身也是一種資料型別)。
  • 對列表的操作包括通過索引下標查詢展示,通過切片來獲取指定部分列表資料。
  • 列表中的物件都會按照插入的順序儲存到列表中,第一個插入的物件儲存到第一個位置,第二個儲存到第二個位置,則可以稱之為列表中的資料有序。
  • 列表是可變型別的資料型別,所以列表是有序的可變的元素集合。

(2)列表的應用場景

思考:有一個人的姓名TOM,怎麼儲存這個資料?

答:通過變數。

思考:如果一個班級100位學生,每個人的姓名都要儲存,應該如何書寫程式?宣告100個變數嗎?

答:列表即可, 列表一次性可以儲存多個資料。

(3)列表的定義格式

[資料1, 資料2, 資料3, 資料4......]

示例

# 1、建立了一個空列表
my_list = []
# 檢視列表的型別
print(type(my_list)) # <class 'list'>

"""
 空列表只表示你再記憶體中開闢了一個空間
 用於儲存資料,但是現實裡邊沒有任何資料。
"""

# 2、建立一個有資料的列表
# 一個列表中可以儲存多個元素,
# 也可以在建立列表時,來指定列表中的元素

# (1)建立一個只包含一個元素的列表
my_list = [10]
print(my_list)

# (2)建立一個包含多個元素的列表
# 多個元素之間使用,隔開
my_list = [10,20,30,40,50]
print(my_list)

# 3、列表中可以儲存任意的物件,包括函式。
# 結果:[10, 'hello', True, None, [1, 2, 3], <built-in function print>]
my_list = [10,'hello',True,None,[1,2,3],print]

注意:

  • 可以說列表是用來儲存物件的物件,列表可以儲存所有的資料型別,包括函式都可以同時儲存在一個列表中。
  • 但是在我們日常開發中使用列表的時候,一個列表中儘量儲存相同的資料型別。
  • 因為不同的資料型別的操作方法是不同的,將來如果要對列表中的資料進行操作,就需要判斷各種資料的型別,然後在運算元據,這樣就非常麻煩了。

2、列表的常用操作

列表的作用是一次性儲存多個資料,程式設計師可以對這些資料進行的操作有:增、刪、改、查。

(1)列表的查詢

1)通過下標查詢

我們可以通過索引(index)來獲取列表中的元素。

索引是元素在列表中的位置,列表中的每一個元素都有一個索引,索引是從0開始的整數,列表第一個位置索引為0,第二個位置索引為1,第三個位置索引為2,以此類推。

name_list = ['Tom', 'Lily', 'Rose']

print(name_list[0])  # Tom
print(name_list[1])  # Lily
print(name_list[2])  # Rose

# 如果使用的索引超過了最大的範圍,會丟擲異常。
# IndexError: list index out of range
print(name_list[3])  # 異常

提示:列表的下標(索引)和字串下標(索引)的用用法是一樣的。包括正負取值,可以參考著字串一起學習,這裡不在通過列表在說明了。

2)通過方法查詢

@1、index()方法

index()方法:返回指定資料所在位置的下標 。

(用法同字串中index()方法的用法一樣)

語法:

列表序列.index(資料, 開始位置下標, 結束位置下標)

快速體驗:

name_list = ['Tom', 'Lily', 'Rose']

print(name_list.index('Lily', 0, 2))  # 1

注意:如果查詢的資料不存在則報錯。

@2、count()方法

count()方法:統計指定資料在當前列表中出現的次數。

(用法同字串中count()方法的用法一樣)

name_list = ['Tom', 'Lily', 'Rose']

print(name_list.count('Lily'))  # 1

@3、len()方法

len()方法:獲取列表的長度,即列表中元素的個數。(是一個通用方法)

name_list = ['Tom', 'Lily', 'Rose']
name_list_len = len(name_list)
print(name_list_len)  # 3

注意: 獲取到的長度的值,是列表的最大索引+1。所以以後在用到列表的最大索引的時候,使用len()-1

3)判斷是否存在

這兩個方法都是公共方法,代表列表,元祖,字典,字串都支援的操作。

@1、in

in:判斷指定資料是否存在於列表中,如果在返回True,否則返回False

name_list = ['Tom', 'Lily', 'Rose']

# 結果:True
result = 'Lily' in name_list
print(result)

# 結果:False
result1 = 'Lilys' in name_list
print(result1)

@2、not in

not in:判斷指定資料是否不在某個列表序列,如果不在返回True,否則返回False。

name_list = ['Tom', 'Lily', 'Rose']

# 結果:False
result = 'Lily' not in name_list
print(result)

# 結果:True
result1 = 'Lilys' not in name_list
print(result1)

示例:

需求:判斷使用者輸入的名字是否已經存在,如果存在,提示使用者已存在,否則提示可以註冊。

name_list = ['Tom', 'Lily', 'Rose']

name = input('請輸入您要搜尋的名字:')

if name in name_list:
    print(f'您輸入的名字是{name}, 名字已經存在')
else:
    print(f'您輸入的名字是{name}, 名字不存在')

(2)列表的增加

作用:增加指定資料到列表中。

@1、append()方法

append()方法:向列表的結尾新增一個元素。

1)語法

列表序列.append(資料)

2)示例

"""
輸出結果:
修改前: ['Tom', 'Lily', 'Rose']
修改後: ['Tom', 'Lily', 'Rose', '孫悟空']
"""
name_list = ['Tom', 'Lily', 'Rose']
print("修改前:", name_list)
name_list.append('孫悟空')
print("修改後:", name_list)

注意一點,列表追加資料的時候,直接在原列表裡面追加了指定資料,即修改了原列表,故列表為可變型別資料。

3)追加一個序列

如果append()方法追加的資料是一個序列,則追加整個序列到列表的結尾。

"""
輸出結果:
修改前: ['Tom', 'Lily', 'Rose']
修改後: ['Tom', 'Lily', 'Rose', ['孫悟空', '豬八戒']]
"""
name_list = ['Tom', 'Lily', 'Rose']
print("修改前:", name_list)
name_list.append(['孫悟空','豬八戒'])
print("修改後:", name_list)

@2、extend()方法

extend()方法:列表結尾追加資料,資料一定是一個序列,則把資料序列裡面的資料拆,開然後逐一追加到列表的結尾。

1)語法

列表序列.extend(資料)

2)快速體驗

name_list = ['Tom', 'Lily', 'Rose']

"""
1、單個資料
輸出結果:
修改前: ['Tom', 'Lily', 'Rose']
修改後: ['Tom', 'Lily', 'Rose', '孫', '悟', '空']
"""
print("修改前:", name_list)
name_list.extend('孫悟空')
print("修改後:", name_list)

"""
2、序列資料
輸出結果:
修改前: ['Tom', 'Lily', 'Rose']
修改後: ['Tom', 'Lily', 'Rose', '孫悟空', '豬八戒']
"""
name_list = ['Tom', 'Lily', 'Rose']
print("修改前:", name_list)
name_list.extend(['孫悟空','豬八戒'])
print("修改後:", name_list)


"""
3、extend()方法和+=的效果是一樣的
輸出結果:
修改前: ['Tom', 'Lily', 'Rose']
修改後: ['Tom', 'Lily', 'Rose', '孫悟空', '豬八戒']
"""
name_list = ['Tom', 'Lily', 'Rose']
print("修改前:", name_list)
name_list += (['孫悟空','豬八戒'])
print("修改後:", name_list)



"""
4、傳入非序列資料
輸出結果:
異常:
TypeError: 'int' object is not iterable
"""
name_list = ['Tom', 'Lily', 'Rose']
print("修改前:", name_list)
name_list.extend(123)
print("修改後:", name_list)

@3、insert()方法

insert()方法:向列表的指定位置插入一個元素。

1)語法

列表序列.insert(位置下標, 資料)

2)快速體驗

"""
輸出結果:
修改前: ['Tom', 'Lily', 'Rose']
修改後: ['Tom', '孫悟空', 'Lily', 'Rose']
"""
name_list = ['Tom', 'Lily', 'Rose']
print("修改前:", name_list)
name_list.insert(1, '孫悟空')
print("修改後:", name_list)

(3)列表的刪除

@1、del

del:可以通過del刪除指定下標的資料。

1)語法

del 目標

2)快速體驗

name_list = ['Tom', 'Lily', 'Rose']

# 1、刪除列表
# 結果:報錯提示:name 'name_list' is not defined
# 證明name_list列表被刪除,已經不存在了。
del name_list
print(name_list)

# 2、刪除指定資料
# 刪除索引為1的元素
"""
輸出結果:
刪除前: ['Tom', 'Lily', 'Rose']
刪除後: ['Tom', 'Rose']
"""
name_list = ['Tom', 'Lily', 'Rose']
print("刪除前:", name_list)
del name_list[1]
print("刪除後:", name_list)

@2、pop()方法

pop()方法:刪除指定下標的資料,如果不指定下標,預設刪除最後一個資料,無論是按照下標還是刪除最後一個資料,pop()方法都會返回這個被刪除的資料。

1)語法

列表序列.pop(下標)

2)快速體驗

"""
1、預設刪除最後一個資料
輸出結果:
刪除前: ['Tom', 'Lily', 'Rose']
刪除後: ['Tom', 'Lily']
刪除的資料: Rose
"""
name_list = ['Tom', 'Lily', 'Rose']
print("刪除前:", name_list)
del_name = name_list.pop()
print("刪除後:", name_list)
print("刪除的資料:", del_name)


"""
2、刪除指定下標的資料
輸出結果:
刪除前: ['Tom', 'Lily', 'Rose']
刪除後: ['Tom', 'Rose']
刪除的資料: Lily
"""
name_list = ['Tom', 'Lily', 'Rose']
print("刪除前:", name_list)
del_name = name_list.pop(1)
print("刪除後:", name_list)
print("刪除的資料:", del_name)

@3、remove()方式

remove()方式:根據元素的值進行刪除,移除列表中某個資料的第一個匹配項。該方法沒有返回值。

1)語法

列表序列.remove(資料)

2)快速體驗

"""
輸出結果:
刪除前: ['Tom', 'Lily', 'Rose', 'Tom']
刪除後: ['Lily', 'Rose', 'Tom']
"""
name_list = ['Tom', 'Lily', 'Rose', 'Tom']
print("刪除前:", name_list)
name_list.remove('Tom')
print("刪除後:", name_list)

@4、clear()方法

clear()方法:清空列表。

示例:

"""
輸出結果:
清空前: ['Tom', 'Lily', 'Rose']
清空後: []
"""
name_list = ['Tom', 'Lily', 'Rose']
print("清空前:", name_list)
name_list.clear()
print("清空後:", name_list)

(4)列表的修改

@1、修改指定下標資料

"""
輸出結果:
修改前 ['Tom', 'Lily', 'Rose']
修改後 ['孫悟空', 'Lily', 'Rose']
"""
name_list = ['Tom', 'Lily', 'Rose']
print("修改前", name_list)
name_list[0] = '孫悟空'
print("修改後", name_list)

@2、reverse()方法

reverse()方法:逆置(反轉)

"""
輸出結果:
修改前: ['孫悟空', '豬八戒', '沙和尚', '唐僧']
修改後: ['唐僧', '沙和尚', '豬八戒', '孫悟空']
"""
name_list = ['孫悟空','豬八戒','沙和尚','唐僧']
print("修改前:", name_list)
name_list.reverse()
print("修改後:", name_list)

@3、sort()方法

sort()方法:排序

1)語法

列表序列.sort( key=None, reverse=False)

注意:reverse表示排序規則,reverse = True 降序,reverse = False 升序(預設)。

key選項是列表中如果有字典資料,按照字典的key進行排序的時候會用到。

2)快速體驗

"""
輸出結果:
修改前: [1, 5, 2, 3, 6, 8]
修改後: [1, 2, 3, 5, 6, 8]
"""
num_list = [1, 5, 2, 3, 6, 8]
print("修改前:", num_list)
num_list.sort()
print("修改後:", num_list)


"""
# 降序
輸出結果:
修改前: ['a', 'j', 'j', 'a', 'f', 'a', 'o', 'u', 'i', 'g', 'h', 'a', 'd', 'j']
修改後: ['u', 'o', 'j', 'j', 'j', 'i', 'h', 'g', 'f', 'd', 'a', 'a', 'a', 'a']
"""
num_list = list('ajjafaouighadj')
print("修改前:", num_list)
num_list.sort(reverse = True)
print("修改後:", num_list)

(5)列表的複製

copy()方法

複製以後的物件,和原物件是獨立,修改一個不會影響另一個。

"""
輸出結果:
name_list列表: ['Tom', 'Lily', 'Rose']
name_list2列表: ['Tom', 'Lily', 'Rose']
"""
name_list = ['Tom', 'Lily', 'Rose']
name_list2 = name_list.copy()
print("name_list列表:", name_list)
print("name_list2列表:", name_list2)

注意:copy()方法字典也通用。

相關文章