1. 程式人生 > 其它 >15個例子掌握Python列表,集合和元組

15個例子掌握Python列表,集合和元組

技術標籤:python

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] = 99
print(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]

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

自始至終:0,1,2,3

從尾到頭:-1,-2,-3

6.Remove函式

與del函式不同,remove函式可用於列表和集合。我們傳遞要刪除的項而不是其索引。

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屬性。

當我們試圖刪除一個不在集合中的專案時,我們會觀察到“remove”和“Discard”之間的區別。Remove將引發一個錯誤,但discard不會發生任何操作。

# remove
a = {1,2,3}
a.remove(5)
KeyError: 5

# Discard
a = {1,2,3}
a.discard(5)
print(a)
{1,2,3}

8.Pop函式

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

預設情況下,pop函式從列表中刪除最後一項並返回它。因此,我們可以把它賦給一個變數。我們可以將索引傳遞給pop函式,刪除特定索引處的元素。例如,pop(-2)將從末尾刪除第二項。

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 4

print(a.count(1), b.count(3))
2 1

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

作者|Soner Yıldırım
編譯|VK
來源|Towards Data Science