首頁>技術>

Python中的一切都是物件。每個物件都有自己的資料屬性和與之關聯的方法。為了有效和恰當地使用一個物件,我們應該知道如何與它們互動。

列表、元組和集合是三種重要的物件型別。它們的共同點是它們都被用作資料結構。為了建立健壯且效能良好的產品,必須非常瞭解程式語言的資料結構。

在這篇文章中,我們將看到這些結構如何收集和儲存資料,以及我們可以對它們進行的操作。我們將看到它們之間的異同。

讓我們先簡要解釋一下這些物件是什麼。然後我們將對每個例子進行詳細說明。

List是Python中的一個內建資料結構。它用方括號中的資料點集合表示。列表可用於儲存任何資料型別或不同的資料型別。列表是可變的,這也是它們如此常用的原因之一。元組是用逗號分隔並用括號括起來的值的集合。與列表不同,元組是不可變的。不變性可以看作元組的識別特徵。Set是不同的不可變物件的無序集合。集合包含唯一的元素。雖然集合是可變的,但是集合的元素必須是不可變的。沒有與集合的元素相關聯的順序。因此,它不像列表那樣支援索引或切片。

我們現在對這些容器有了基本的瞭解。下面的示例將介紹如何與這些物件互動。

1.列表與集合

我們可以根據字串中的字元建立列表或集合。要使用的函式是list和set函式。

text = "Hello World!"print(list(text))['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!']print(set(text)){'H', 'W', 'o', ' ', 'l', 'r', '!', 'e', 'd'}

結果列表和集合物件的區別:

列表包含所有字元,而集合只包含唯一字元。列表是根據字串中字元的順序排序的。集合的元素並沒有順序。2.列表與集合索引

在前面的例子中,我們看到集合不具有順序。因此,我們不能像處理列表那樣對集合進行切片或索引。

text = "Hello World!"list_a = list(text)print(list_a[:2])['H','e']set_a = set(text)print(set_a[:2])TypeError: 'set' object is not subscriptable

對集合進行切片或索引會引發型別錯誤,因為這是與集合物件型別的屬性相關的問題。

3.列表與元組

列表和元組的區別在於易變性。與列表不同,元組是不可變的。例如,我們可以向列表新增項,但元組不行。

list_a = [1,2,3,4]list_a.append(5)print(list_a)[1,2,3,4,5]tuple_a = (1,2,3,4)tuple_a.append(5)AttributeError: 'tuple' object has no attribute 'append'

更改集合的函式(例如append、remove、extend、pop)不適用於元組。

4.元組中的可變元素

不變性可能是元組最具識別性的特徵。元組確定後不能改變。

tuple_a = (3, 5, 'x', 5)tuple_a[0] = 7 # 錯誤

雖然元組是不可變的,但是它們可以包含可變的元素,比如列表或集合。

tuple_a = ([1,3], 'a', 'b', 8)tuple_a[0][0] = 99print(tuple_a)([99, 3], 'a', 'b', 8)
5.Del函式

Del函式代表delete,因此它用於從集合中刪除項。它接受要刪除的項的索引。

由於集合是無序的,因此它們中沒有項的索引。因此,del函式不能用於集合。

list_a = [1, 2, 3, 4]del(list_a[0])print(list_a)[2, 3, 4]

注意:有兩種方法可以索引列表:

list_a = ['a','b',3,6]list_a.remove('a')print(list_a)['b', 3, 6]set_a = {'a','b',3,6}set_a.remove('a')print(set_a){3, 6, 'b'}
7.Discard函式

Discard也可用於從集合中移除項。但是列表沒有discard屬性。

# removea = {1,2,3}a.remove(5)KeyError: 5# Discarda = {1,2,3}a.discard(5)print(a){1,2,3}
8.Pop函式

Pop函式可用於列表和集合。但是,它在列表和集合上的工作方式不同。

list_a = ['a','b',3,6,4]item = list_a.pop()print(list_a)['a', 'b', 3, 6]print(item)4

在集合上使用時,pop函式會刪除任意項,因為集合中沒有索引或順序。

set_a =  {'a','b',3, 6, 4}item2 = set_a.pop()print(set_a){4, 6, 'a', 'b'}print(item2)3
9.元組或元組列表

這些集合物件可以從一個集合物件轉換為另一個集合物件。如名稱所示,要使用的函式是list、tuple和set。

a = [1,2,3,'a',1,3,5]print(tuple(a))(1, 2, 3, 'a', 1, 3, 5)print(set(a)){1, 2, 3, 5, 'a'}b = {'a',1, 4, 8}print(list(b))[8, 1, 4, 'a']print(tuple(b))(8, 1, 4, 'a')
10.新增新專案

由於元組是不可變的,我們只能向列表或集合新增新項。

例如,append方法在列表末尾新增一個項。由於集合沒有結束或開始的概念,我們不能使用append方法。對於集合,add方法用於新增新項。

a = [1,2,3]a.append(4)print(a)[1,2,3,4]b = {1,2,3}b.add(4)print(b){1,2,3,4}
11.將專案插入列表

insert函式還用於向列表中新增元素。但是,它允許指定新元素的索引。例如,我們可以在列表的開頭新增一個新元素(index=0)。

a = [1, 2, 3, 4, 5]a.insert(0, 'a')a['a', 1, 2, 3, 4, 5]

因為它需要索引,所以不能對集合使用insert函式。

12.組合兩個物件

在某些情況下,我們需要將屬於同一個型別的項組合到一起。我們有多個選擇來組合列表、元組和集合的物件。

“+”運算子可用於新增列表或元組,但不能用於新增集合。

a = [1,2,3]b = [11,32,1]print(a + b)[1, 2, 3, 11, 32, 1]print(tuple(a) + tuple(b))(1, 2, 3, 11, 32, 1)

我們可以用並集運算符合並兩個集合。將刪除重複的元素。

a = {1,2,3,4}b = {1,5,6}print(a.union(b)){1, 2, 3, 4, 5, 6}

在建立空字典時,我們需要記住這一點。如果我們只使用大括號,裡面什麼也沒有,Python會認為它是一個空字典。我們可以使用set函式建立一個空集。

a = {}print(type(a))<class 'dict'>b = set()print(type(b))<class 'set'>c = set({})print(type(c))<class 'set'>
13.排序

只有擁有順序我們才能談分類。因此,排序適用於列表和元組。集合無法排序,因為沒有順序。

sort函式修改應用它的物件。因此,我們只能在列表中使用它。元組是不可變的,所以我們不能對它們進行排序。

a = [3,1,5,2]a.sort()print(a)[1, 2, 3, 5]

但是,我們可以對元組使用sorted函式。它建立一個排序的列表,其中包含任何iterable。所以我們可以使用它來建立一個基於元組的排序列表。

b = (6,1,4,2)print(sorted(b))[1,2,4,6]
sort:對物件進行排序,但不返回任何內容。sorted:返回iterable中已排序項的列表,但不修改原始物件。14.更新集合

update方法可用於透過其他iterables中的項更新集合。由於集合的性質,更新時會刪除重複項。

a = {'x', 1, 4}b = [3, 4, 1]c = ('x', 'y', 'z')a.update(b,c)print(a){1, 3, 4, 'y', 'z', 'x'}
15.長度和計數

len函式返回集合的長度(即專案數)。它適用於列表、元組和集合。

count函式可用於計算特定元素的出現次數。它只用於列表和元組。由於集合不包含任何重複項,因此所有項的計數均為1。

a = [1,4,5,6,1]b = (3,4)c = {1,2,3,4}print(len(a), len(b), len(c))5 2 4print(a.count(1), b.count(3))2 1
結論

我們已經討論了Python中3種基本資料結構之間的異同。

有更多的方法和操作可以在這些物件上工作。例如,列表生成式在資料分析和操作中非常有用:https://towardsdatascience.com/11-examples-to-master-python-list-comprehensions-33c681b56212 。

全面理解資料結構是非常重要的,因為它們是任何程式語言的基本組成部分。它們也是設計算法的關鍵因素。

14
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • JVM垃圾收集器