Python集合使用詳解
本文由碼農網 – 向寬原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
我會在這篇文章介紹Python幾種型別的集合。
在開始前,先定義集合是什麼。一個**集合**就像籃子,你可以放進和取出東西,可以是同一類的東西,也可以是不同類的。基本上,它是個讓你收集東西的儲存結構。
比如你有一個車的型別(car),建立了幾種車,想把這些車放在一起又容易找到,就是運用集合非常好的場景。
集合存在於記憶體中。你不需要建立集合或者任何架板,這些都是現成的。只要有個變數就可以往裡面放車子了。完了之後你就可以根據名字或者索引(在集合中的引數)把他們取出。
Python提供了許多自建型別歸屬於集合類,但是沒有一個叫collection的型別,他們是lists,mappings,和sets。
- lists
- strings
- dictionaries
- sets
list
列表:list是Python內建的一個資料型別。list是可變的允許新增同一型別或不同型別的元素,類似於其他語言中的指標。
下面的例子是建立列表並新增元素:
alist = ["item1", "item2", 4]
注意這個列表成分混雜,包含了字串和整數型別。
要取回列表中的元素,只需引用該元素的索引序號。Python列表序號是從零開始的,如果我要最後一個元素,它是第3位,我需要用2來索引:
alist[2] > 4
系統返回了4。取列表中的元素時,只要從它的位置減去1就得到正確的索引序號。
檢查列表長度用len命令:
len(alist) > 3
向列表新增元素用append()函式:
alist.append(False) len(alist) > 4
我們增加了一位列表長度,新增了一個資料型別—布林型別。列表並沒有表示任何不滿。
我們可以呼叫remove()移除列表元素:
alist.remove("item2")
remove()沒有返回引數,列表會被更新,現在它包含三個元素:
['item1', 4, False]
有幾種方法將元素從列表中取出。我們前面說過用索引訪問元素,如果我訪問索引2,將會得到元素3。
thevalue = alist[2] print(thevalue) > False
上面的程式碼為我們複製了元素,元素還在列表中,列表的長度不會受到影響。
然而我們用pop(), 在得到元素的同時將元素移除了列表:
thevalue = alist.pop(1) print(thevalue) > 4 print("after pop", alist) > ['item1', False]
列表也可以被排序,我們有包含字串的列表:
alpha = ["z", "b", "a", "c"]
你可以用sort()命令來排序:
alpha.sort()
沒有返回值,但alpha已經被排序了,你可以列印出來看看:
print(alpha)
元素可以被反序排列,只需引用reverse():
alpha.reverse
字串是列表嗎?
字串與列表有很多相似之處,但字串是不可改動的,而列表可以隨意修改。
字串可以向列表一樣索引。你可以像數列表中元素一樣數出字串中的字元。
比如:
mystring = "The quick brown fox." print(len(mystring )) > 20 print(mystring[4]) > q
和列表不一樣的是你不能追加字元,也不能更改字串中特定位置字元。
我們看一下給特定位置分配字元會出現什麼情況:
mystring[4] = 'z' > TypeError: 'str' object does not support item assignment
根據字串,可以將它轉化成列表。取上面用到的mystring變數,我們用split(),它會在空格斷開:
stringlist = mystring.split() stringlist > ['The', 'quick', 'brown', 'fox.'] type(stringlist) > <class 'list'>
每個單詞都變成了列表中的元素,我們也清楚的看到型別變為列表。
如果字串沒有空格我們也可以轉換,但結果如何呢,看看吧:
mystring2 = "Thequickbrownfox." stringlist2 = mystring2.split() stringlist2 > ['Thequickbrownfox.'] type(stringlist2) > <class 'list'>
我們還是得到了一個列表,單隻有一個元素。在這個例子中,這個轉換沒有多大用處。
mappings
mapping也是內建型別,只在字典中使用。字典是鍵/值對應的,不同於列表,我們不用序號索引,代之的是字典的鍵(key)。
類似列表建立字典用鍵/值成對而不是單一元素,給個例子:
mydictionary = {"item1":45, "item2":76, "item3":145}
每個鍵/值用冒號分開,前面是鍵後面是值。在第一個元素中,item1是鍵,45是值。同時注意我們用大括號來包住元素。
當從字典中取元素時,序號不可用了,那我們就該想到鍵。如果要item2,我們這樣做:
mydictionary["item2] > 76
和列表一樣,可以檢視字典的長度:
len(mydictionary) > 3
改變item2的值,可以直接給他賦值:
mydictionary["item2] = 100
增加元素也是直接賦值:
mydictionary["item62"] = 433
item62現在就存在於字典了,字典長度加1。
根據鍵可以刪除字典元素:
del mydictionary["item2"]
前面提到字典是鍵/值成對出現,如果我們只要鍵可以這樣做:
mydictionary.keys() > dict_keys(['item3', 'item1', 'item62'])
訪問值也是同樣的方法:
mydictionary.values() > dict_values([145, 45, 433])
Sets
set是無序的集合,不能有重複的元素,也不能排序,sort()是不能使用的。
同列表相比set驗證元素是否存在會更快。
建立一個set:
myset = {3, 4, 5, 1}
或者用set語句來轉化已存在的型別:
multistory = [0,1,5,4,3,7,6,6] my set = set(my list) > {0,1,3,4,5,6,7}
因為set只能包含唯一的元素,所以重複的6被移除了。從已有資料建立唯一元素集合,set()是個非常好的方法。
如果我試圖讓移除的6回來,它是不會理會的:
myself.add(6) > {0, 1, 3, 4, 5, 6, 7}
要移除set中元素需要用remove():
my set.remove(4)
set也不支援索引,用序號來訪問,它會返回錯誤:
myset[2] >TypeError: 'set' object does not support indexing
set有些獨有的方法,如果你熟悉set的數學方法(difference,intersection和union),會很好用。
我們從difference開始,假設我有兩個set:
set1 = {1,3,6,7} set2 = {1,3,6,8,10}
用set1和set2做difference會得到7,7在set1而不在set2。
set1.difference(set2) > {7}
反過來用set2和set1做對比:
set2.difference(set1) > {8, 10}
也可以來找它們的相同部分:
set.intersection(set2) > {1, 3, 6}
最後來看把它們合併起來形成一個新的set:
set3 = {set1.union(set2) > {1, 3, 6, 7, 8, 10}
新的set包含它們兩個中所有元素。
總結
我們看過了list,string(雖然不屬於集合),dictionary和set。我們學習了它們所有的特定運算和獨有功能。我希望這個介紹可以讓你對Python的集合多點認識。
譯文連結:http://www.codeceo.com/article/python-collection-usage.html
英文原文:A Tour of Python Collections
翻譯作者:碼農網 – 向寬
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- echarts 柱狀圖 詳解與使用集合Echarts
- Python 列表、元組、字典及集合操作詳解Python
- Python中集合的概念及基本操作詳解!Python
- Redis有序集合詳解Redis
- Kotlin——集合詳解Kotlin
- Java集合詳解(二)Java
- Java集合詳解(三)Java
- Java集合類詳解Java
- Java集合詳解(一):全面理解Java集合Java
- java基礎詳解-集合Java
- Java集合(三) ArrayList詳解Java
- Java集合(六) Set詳解Java
- Java集合(七) Queue詳解Java
- 詳解 SQL 集合運算SQL
- Java集合型別詳解Java型別
- 【Java集合】單列集合Collection常用方法詳解Java
- Python中字典使用詳解Python
- Python Pandas的使用 !!!!!詳解Python
- python—time模組使用詳解Python
- python—random模組使用詳解Pythonrandom
- Python基本語法_集合set/frozenset_內建方法詳解Python
- Redis 有序集合(zset)命令詳解Redis
- JavaScript --- Map集合結構詳解JavaScript
- JavaScript — Map集合結構詳解JavaScript
- Java集合(四) LinkedList詳解Java
- python單例的使用詳解Python單例
- python—hashlib模組使用詳解Python
- Python之Requests模組使用詳解Python
- java集合學習(一):詳解ArrayListJava
- java集合(2)- java中HashMap詳解JavaHashMap
- JAVA集合詳解(Collection和Map介面)Java
- Java中的併發集合詳解Java
- 使用python來操作redis用法詳解PythonRedis
- python使用matplotlib繪圖詳解Python繪圖
- Java 集合詳解 | 一篇文章解決Java 三大集合Java
- Java內功心法,Set集合的詳解Java
- Java集合詳解(二):ArrayList原理解析Java
- Java集合詳解(五):Hashtable原理解析Java