數(shù)據(jù)容器入門
Python中的數(shù)據(jù)容器:
一種可以容納多份數(shù)據(jù)的數(shù)據(jù)類型,容納的每一份數(shù)據(jù)稱之為1個元素
每一個元素,可以是任意類型的數(shù)據(jù),如字符串、數(shù)字、布爾等。
數(shù)據(jù)容器根據(jù)特點的不同,如:是否支持重復(fù)元素,是否可以修改,是否有序,等
分為5類,分別是:
列表(list)、元組(tuple)、字符串(str)、集合(set)、字典(dict)
數(shù)據(jù)容器:
1、List(列表)入門
1、list(列表)就是C語言里的數(shù)組。
在C語言中,數(shù)組的元素必須是相同類型的數(shù)據(jù)。
如果需要在一個數(shù)組中存儲不同類型的數(shù)據(jù),可以考慮使用結(jié)構(gòu)體(Struct)或聯(lián)合體(Union)來實現(xiàn)。結(jié)構(gòu)體允許將不同類型的數(shù)據(jù)組合在一起,而聯(lián)合體則允許共享同一塊內(nèi)存空間存儲不同類型的數(shù)據(jù)。但是Python不一樣:
字面量:[元素1,元素2,元素3]
定義變量:變量名稱 = [元素1,元素2,元素3]
定義空列表:
變量名稱 = [] ? ? 或 ? ? ?變量名稱 = list()
元素可以是不同類型。例如:
list1 = ['Hello', 111, True]
2、列表可以嵌套:
list2 = [['Hello', 111, True], ['world', 222, False]]
3、可以使用列表的下標索引從列表中取出元素
list1 = ['Hello', 111, True] print(list1[0]) # 輸出Hello print(List[-1]) # 反向索引,輸出 True,從-1開始,依次遞減 -1,-2…… list2 = [['Hello', 111, True], ['world', 222, False]] print(list2[1]) print(list2[0][1]) """ 輸出結(jié)果: ['world', 222, False] 111 """
4、列表的常用方法(操作)
插入元素、刪除元素、清空列表、修改元素、統(tǒng)計元素個數(shù) ? 等等功能,這些功能我們都稱之為:列表的方法
在Python中,如果將函數(shù)定義為class(類)的成員,那么函數(shù)會稱之為:方法
class Student: def add(self,x,y): return x+y
方法和函數(shù)功能一樣,有傳入?yún)?shù),有返回值,只是方法的使用格式不同,函數(shù)與方法之間只有這一點不同:
函數(shù)的使用:num add(1,2) ?# ?def num (x,y): ……
方法的使用:student = Student()?? ? ? ? ? ? ? ? ? ? ? num = student.add(1,2)
列表內(nèi)部提供了很多方法:注意:方法只能是小括號()
方法 功能或注意點 查找:? 列表名.index(元素)
查找指定元素在列表的下標
如果找不到,報錯ValueError
修改:列表名[下標] = 值 是重新賦值,“列表名[下標] = 值”中的值會替換原來的值 插入:
列表名.insert(下標,元素)
是在指定的地方插入指定的元素,“列表名.index(下標,元素)”就是在該下標下插入該元素。
需要注意的是:1、這里是insert,不是index。
2、插入后,后面的元素會后移,而不是被替換掉。
3、是小括號,不是中括號。
追加:
單個元素:
列表名.append(元素)
列表名.extend(其他數(shù)據(jù)容器)
append()是將指定元素追加到列表的尾部。
extend()是將其他數(shù)據(jù)容器的內(nèi)容取出,依次追加到列表尾部。
通過指定下標來刪除:
1、del ?列表名[下標]
2、列表名.pop(下標)
通過指定元素來刪除:
列表名.remove(元素)
通過指定元素來刪除時,是刪除某元素在列表中的第一個匹配項
刪除所有匹配項,見下面的示例代碼。
清空列表:
列表名.clear()
結(jié)果:[] 統(tǒng)計某元素在列表內(nèi)的數(shù)量:
列表名.count(元素)
不可以查詢到表中表的內(nèi)容。 統(tǒng)計列表長度
len(列表名)例如:
# 查詢方法 list1 = ["Hello", "World", "!"] index = list1.index("Hello") print(index) # 輸出結(jié)果:0 (這表明是正向的索引) list2 = [["Hello", 111, True], ['world', 222, False]] index = list2.index("Hello") print(index) # 輸出:ValueError: 'Hello' is not in list ''' 要查找的元素 "Hello" 是一個字符串, 而列表中的元素是嵌套列表。 在這種情況下,需要使用循環(huán)來遍歷列表 并檢查子列表中的元素。 否則會報錯。 修正后:↓ ''' for i in range(len(list2)): if "Hello" in list2[i]: index = i break print(index) # 輸出結(jié)果:0
# 修改元素值 list1 = ["Hello", "World", "!"] list1[1] = "Python" # 正向下標 list1[-1] = "~" # 反向下標 print(list1) # 輸出結(jié)果:['Hello', 'Python', '~']
# 插入元素值 list1 = ["Hello", "World", "!"] list1.insert(1,"Python") list1.insert(-1, "~") print(list1) # 輸出結(jié)果:['Hello', 'Python', 'World', '~', '!']
# 追加元素 list1 = ["Hello", "World", "!"] list1.append("~") print(list1) # 輸出結(jié)果:['Hello', 'World', '!', '~'] list2 = [1, 2, 3] list2.append([4, 5, 6]) # list2.append(7, 8) #這個會報錯,只能追加單個元素的方法 print(list2) # 輸出結(jié)果:[1, 2, 3, [4, 5, 6]] list2.extend(list1) # 追加其他數(shù)據(jù)容器 print(list2) # 輸出結(jié)果:[1, 2, 3, [4, 5, 6], 'Hello', 'World', '!', '~']
# 通過指定下標來刪除元素 list1 = ["Hello", "World", "!"] list2 = [1, 2, 3] del list1[0] element = list2.pop(0) # 用element來接受刪點的元素 print(list1) # 輸出結(jié)果:['World', '!'] print(list2) # 輸出結(jié)果:[2, 3] print(element) # 輸出結(jié)果:1 # 通過指定元素來刪除 list3 = [1, 1, 2, 3] list3.remove(1) print(list3) # 輸出結(jié)果:[1, 2, 3]
# 清空列表 list3 = [1, 1, 2, 3] list3.clear() print(list3) # 輸出結(jié)果:[]
# 統(tǒng)計元素1的個數(shù) list3 = [1, 1, 2, 3] count = list3.count(1) print(count) # 輸出結(jié)果:2
# 統(tǒng)計列表長度 print(len(list3)) # 輸出結(jié)果:4
# 綜合訓(xùn)練 list5 =[21, 25, 21, 23, 22, 20] list5.append(31) # 追加一個數(shù)字31到列表的尾部 list5.extend([29, 33, 30]) # 追加一個新列表[29,33,30]到列表的尾部 num1 = list5[0] # 取出第一個元素(應(yīng)是:21) num2 = list5[-1] # 取出最后一個元素(應(yīng)是:30) index = list5.index(31) # 查找元素31所在的位置 print(f"追加一個數(shù)字31到列表的尾部后的list5是:{list5}") print(f"追加一個新列表[29,33,30]到列表的尾部后list5是:{list5}") print(f"取出的第一個元素是: {num1}") print(f"取出最后一個元素是: {num2}") print(f"元素31所在的位置是: {index}") """ 輸出結(jié)果: 追加一個數(shù)字31到列表的尾部后的list5是:[21, 25, 21, 23, 22, 20, 31, 29, 33, 30] 追加一個新列表[29,33,30]到列表的尾部后list5是:[21, 25, 21, 23, 22, 20, 31, 29, 33, 30] 取出的第一個元素是: 21 取出最后一個元素是: 30 元素31所在的位置是: 6 """
刪除列表中所有與指定元素相等的元素:
1、可以使用循環(huán)和條件語句來遍歷列表并刪除元素。一種常見的方法是使用列表推導(dǎo)式。
下面是一個例子:my_list = [1, 2, 3, 2, 4, 2, 5] element_to_remove = 2 # 刪除列表中所有的2 my_list = [x for x in my_list if x != element_to_remove] print(my_list)
上面的代碼中,我們有一個列表`my_list`,其中包含一些整數(shù)。我們想要刪除所有與指定元素`element_to_remove`相等的元素。使用列表推導(dǎo)式,我們創(chuàng)建了一個新列表,其中包含所有不等于`element_to_remove`的元素。通過重新賦值給`my_list`,我們將原來列表中的所有匹配元素都刪除了。最后,我們打印輸出列表的結(jié)果,可以看到所有與指定元素相等的元素已經(jīng)被刪除了。
2、如果要修改原列表而不是創(chuàng)建一個新列表,可以使用`while`循環(huán)來遍歷列表,使用`remove()`方法刪除匹配元素,直到列表中不再存在這個元素。例如:
my_list = [1, 2, 3, 2, 4, 2, 5] element_to_remove = 2 while element_to_remove in my_list: ? ? my_list.remove(element_to_remove) print(my_list)
在這個例子中,我們通過不斷地調(diào)用`remove()`方法來刪除匹配元素,直到列表中不再存在與指定元素相等的元素。最終,我們打印輸出列表的結(jié)果,可以看到匹配元素已經(jīng)全部被刪除了。
2、1ist(列表)的遍歷
列表的遍歷有兩種:使用while循環(huán),遍歷列表的元素和使用for循環(huán),遍歷列表的元素。
while循環(huán):
index = 0
while index < len(列表名):
? ? ? ? 元素 = 列表名[index]
? ? ? ? 其他處理……
? ? ? ? index += 1 ?#最關(guān)鍵的一步,千萬別忘記。
除了while:循環(huán)外,Python中還有另外一種循環(huán)形式:for循環(huán)。
對比while,for循環(huán)更加適合對列表等數(shù)據(jù)容器進行遍歷。for 臨時變量 in 數(shù)據(jù)容器:
? ? ? ? 對臨時變量進行處理
for循環(huán)中,會把取出的變量賦值給臨時變量
# 通過while來完成列表的遍歷 list3 = [1, 1, 2, 3] print("列表的元素值是:", end=" ") index = 0 # 從0下標開始遍歷 while index < len(list3): element = list3[index] # 取出index下標對應(yīng)的元素 print(element, end=" ") index += 1 # 千萬別忘了這一點,循環(huán)的關(guān)鍵;python里不支持index++ # 輸出結(jié)果:列表的元素值是: 1 1 2 3 print() # 通過for來完成列表的遍歷 for element in list3: print(f"列表的元素有:{element}") """ 輸出結(jié)果: 列表的元素有:1 列表的元素有:1 列表的元素有:2 列表的元素有:3 """
兩者之間比較:
while循環(huán)和for循環(huán),都是循環(huán)語句,但細節(jié)不同:
·在循環(huán)控制上:
while循環(huán)可以自定循環(huán)條件,并自行控制
for循環(huán)不可以自定循環(huán)條件,只可以一個個從容器內(nèi)取出數(shù)據(jù)
·在無限循環(huán)上:
while循環(huán)可以通過條件控制做到無限循環(huán)
for循環(huán)理論上不可以,因為被遍歷的容器容量不是無限的
在使用場景上:
while循環(huán)適用于任何想要循環(huán)的場景
for循環(huán)適用于逾歷數(shù)據(jù)容器的場景或簡單的固定次數(shù)循環(huán)場景???????
3、函數(shù)與方法?
在Python中,方法(method)與函數(shù)(function)是類似但又有一些區(qū)別的概念。函數(shù)是一段封裝了一組操作的可重復(fù)使用的代碼塊。它可以接受零個或多個參數(shù),并且可以返回一個結(jié)果。函數(shù)可以通過`def`關(guān)鍵字來定義,并且可以在需要時被調(diào)用。例如:
def greet(name): ? ? print("Hello, " + name + "!") ? ?? greet("Alice")
在這個例子中,`greet`函數(shù)接受一個參數(shù)`name`,并打印出問候語。調(diào)用`greet("Alice")`會輸出`Hello, Alice!`。
方法是一個對象的行為,通常與特定的對象關(guān)聯(lián)。對象可以是Python中的內(nèi)置類型(如字符串、列表等)或用戶定義的類的實例。方法可以通過對象的名稱和`.`運算符來調(diào)用。例如:
s = "hello" print(s.upper())
在這個例子中,字符串對象`s`具有一個名為`upper`的方法。`upper`方法將字符串中的所有字母轉(zhuǎn)換為大寫,并返回轉(zhuǎn)換后的結(jié)果。調(diào)用`s.upper()`會輸出`HELLO`。
方法與函數(shù)的主要區(qū)別在于:方法必須通過某個對象進行調(diào)用,而函數(shù)則可以直接調(diào)用。方法與對象之間是綁定的,它們可以訪問并操作對象的屬性和狀態(tài)。而函數(shù)則是獨立存在的,它們沒有綁定到特定的對象。此外,方法的定義通常是在類中,而函數(shù)的定義可以是全局的。
4、列表推導(dǎo)式(list comprehension)
列表推導(dǎo)式是Python中一種簡潔的語法,用于生成新的列表。它提供了一種方便的方式來根據(jù)現(xiàn)有列表或其他可迭代對象的元素,通過應(yīng)用條件或操作來創(chuàng)建新的列表。
列表推導(dǎo)式的一般語法如下:
new_list = [expression for item in iterable if condition]
其中,`expression`是一個表達式,定義了新列表中每個元素的計算方式;`item`是迭代過程中的臨時變量,可以使用任意名稱;`iterable`是一個可迭代對象,如列表、元組或其他可迭代的數(shù)據(jù)結(jié)構(gòu);`condition`是一個可選的條件,用于過濾元素。
通過列表推導(dǎo)式,我們可以對現(xiàn)有的列表進行篩選、轉(zhuǎn)換或組合,從而一行代碼就生成一個新的列表。這種簡潔的語法特性在處理列表數(shù)據(jù)時非常有用,可以使代碼更簡潔、易讀和高效。以下是幾個示例:
# 生成一個由1到5的平方組成的新列表 squares = [x**2 for x in range(1, 6)] ?# [1, 4, 9, 16, 25] # 篩選出列表中大于10的元素 numbers = [1, 5, 12, 9, 8, 15] filtered_numbers = [x for x in numbers if x > 10] ?# [12, 15] # 將列表中的字符串元素轉(zhuǎn)換為大寫形式 words = ["hello", "world", "python"] uppercase_words = [word.upper() for word in words] ? # ["HELLO", "WORLD", "PYTHON"]
請注意,雖然列表推導(dǎo)式在簡單情況下使用非常方便,但在處理大型和復(fù)雜的數(shù)據(jù)集時,可能需要考慮使用其他更加靈活和可讀性更好的方法。文章來源:http://www.zghlxwxcb.cn/news/detail-643785.html
這種方式相對簡潔,但需要注意的是,它創(chuàng)建了一個新的列表,而不是修改原來的列表。如果要在原地修改列表,可以使用循環(huán)和條件語句的方式來遍歷列表并刪除元素。???????文章來源地址http://www.zghlxwxcb.cn/news/detail-643785.html
到了這里,關(guān)于Python數(shù)據(jù)容器——列表(list)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!