Python容器:列表、元組、字典、集合

序言

  • 此文章針對有一定基礎的人,簡明扼要的介紹字符串、列表、元組、字典、集合的概念和常用操作,以備複習鞏固之用。

  • 底層的基本數據類型:布爾型,整形,浮點型以及字符串類型。

  • 基本數據類型組合起來稱之爲數據結構。

    • 數據結構:列表、元組、字典、集合。

序列

  • 序列:一系列元素以它們所處的位置爲索引,以第一個到最後一個依次編號就組成一個序列。
  • 序列結構:字符串、元組和列表都是序列結構,但是它們又有各自的特點。
    • 元組和列表與字符串不同的是,元組和列表並不是求所含元素的種類相同,每個元素都可以是任何Python類型的對象。
    • 元組和列表不同的是,元組是不可變的,元組被賦值後,這些值就會被固定在元組中,不會被修改,而列表中的值還可以進行插入、刪除等操作。

字符串(string)

  • 字符串是我們首先要接觸到的Python序列類型,其本質爲字符序列,Python字符串不可改變,無法對原字符串進行修改,但是可以將字符串的一部分複製到新的字符串中。

創建字符串

  • 1.1 單引號
    • 雙引號
    • 三個單引號:創建多行字符串
'example1'
"example2"
'''example3,
example4
continue'''
  • 1.2 使用str()轉換
str(123)
'123'
#注意用print輸出的差別,沒有引號
print(str(123))
123

字符串的簡單操作

  • \轉義
    • \n
    • \t
    • "
  • +拼接
#注意,one後面有個空格
使用 + 進行拼接
'one '+'two'
'one two'
直接寫在後面也可以拼接
'one ''two'
'one two'
  • *複製

  • []中括號提取

#注意,偏移量不能超過字符串長度
vocabulary = 'transcendental'
vocabulary[0]
't'
vocabulary[-1]
'l'
  • [start : end : step]字符串分片
#:引號不可省略,其他的都可以省略
#[:] 提取全部
#[:end] 開始到end - 1
#[start:end:step]定步長截取
#負號的使用可以帶來許多有意思的操作,比如步長爲-1,那麼將會反向輸出字符串
#在這裏允許偏移量超過字符串長度
vocabulary = 'transcendental'

相關操作函數

  • len()獲取字符串函數
  • split()分割
  • join()合併
  • replace()替換字符串
  • startswith()判斷字符串開始字符是否爲某個字符串
  • find()查詢某個字符的開始的偏移量
  • rfind()查詢某個字符的最後的偏移量
  • count()統計某個字符出現的次數
  • title()所有單詞開頭字母變大寫
  • upper()所有字母大寫
  • lower()所有字母小寫
  • swapcase()大小寫轉換
  • split()分割
#split基於分隔符分割字符串,分割成爲列表
#逗號爲分隔符,分割program_ex 
program_ex = 'hello,world'
program_ex.split(',')
['hello','world']
  • join()合併
#與split邏輯相反
#調用順序:首先指定粘合用的字符串,然後指定需要粘合的列表
#string.join(list)
crypto_list = "'Yeti', 'Bigfoot', 'Loch Ness Monster'"
ctypto_string = ','.join(crypto_list)
print('Found and signing book deals:',ctypto_string)
Found and signing book deals:Yeti, Bigfoot, Loch Ness Monster
  • replace()替換字符串
#參數 需要被替換的子串,用於替換的子串,需要替換次數
#將三個o替換成X
crypto_list = "'Yeti', 'Bigfoot', 'Loch Ness Monster'"
crypto_list_replace = crypto_list.replace('o','X',3)
print(crypto_list_replace)
['Yeti', 'BigfXXt', 'LXch Ness Monster']

列表(list)

創建列表

  • 1.1:中括號[ ]或者list( )創建列表
empty_list = []
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']

another_empty_list = list()
  • 1.2:使用list()轉換
#字符串轉換
list('cat')
['c','a','a']

#元組轉換
a_tuple = ('ready','fire','aim')
list(a_tuple)
['ready','fire','aim']
  • 1.3 split分割,參見字符串中的split()
  • 1.4(高級方式):列表推式(一種從一個或者多個迭代器快速簡潔地創建數據結構的一種方法,將循環和條件判斷結合,避免語法冗長)
  • 表達式:
    • [expression for item in iterable]
    • [expression for item in iterable if condition]
number_list = [number for number in range(1,6)]
number_list
[1,2,3,4,5]
a_list = [number for number in range(1,6) if number % 2 == 1]
a_list
[1,3,5]
  • 循環嵌套
    • 創建一個元組,其中元組第一項由循環1控制,第二項由循環2控制。
    • [(iterable1,iterable2) for item in iterable1 for item in iterable2]
    • example:
列表推導模式
rows = range(1,4)
cols = range(1,3)
cells = [(row,col) for row in rows for col in cols]
	for cell in cells:
		print(cell)
(1 1)
(1 2)
(2 1)
(2 2)
(3 1)
(3 2)

普通模式
rows = range(1,4)
cols = range(1,3)
	for row in rows:
		for col in cols:
			print(row,col)
1 1
1 2
2 1
2 2
3 1
3 2

列表的簡單操作

  • 獲取列表元素
    • 通過偏移量(offse)獲取對應位置的元素
    • 表達式:list_number[offset]
#正偏移量
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
weekly[0]
'Monday'
weekly[1]
'Tuesday'
#負偏移量,從尾數開始計數
weekly[-1]
'Friday'
  • 列表的嵌套:列表中可以包含各類元素,也可包含其它列表。
#列表3中的元素類型包含整形,字符串,數組
list1 = ['Wednesday','Friday']
list2 = [3,'apple',4,'TV']
list3 = [list1,'helloworld',list2,8,5]
#訪問列表3中第一元素
list3[0]
['Wednesday','Friday']
#通過列表3訪問列表2中第一個元素
list3[2][1]
3
  • 修改列表元素
    • 通過偏移量(offset)修改列表元素
#使用偏移量無法更改字符串中的指定字符,因爲字符串本身不可變。
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
weekly[1] = 'correct'
['Monday','Tuesday','correct','Thursday','Friday']
  • 指定範圍的列表切片
#獲取子序列
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
weekly[0:2]
['Monday','Tuesday']
#設置步長:每兩個元素提取一個
weekly[::2]
['Monday','Wednesday','Friday']
#列表逆序,同樣使用負號可以產生很有意思的事情
weekly[::-1]
['Friday','Thursday','Tuesday','Wednesday','Monday']

列表函數

  • append()

  • extend()

  • insert()

  • del()

  • remove()

  • pop()

  • index()

  • in()

  • =賦值

  • copy()

  • append():列表後追加元素

# 插入Saturday
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
weekly.append('Saturday')
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
  • extend()或者+=:列表合併,將一個列表加入到另一箇中,成爲一個列表。
# 合併列表
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
weekend =['Saturday','Sunday']
weekly.extend(weekend)
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

weekly += weekend
weelkly
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']

  • insert()
# 插入Saturday
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
weekly.insert(5,'Saturday')
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
  • del()
# 刪除Friday,del爲Python語句,而不是list方法,所以不能用  .  調用
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
del weekly[4]
weekly
['Monday','Tuesday','Wednesday','Thursday']
  • remove()
# 刪除Friday,remove是list方法
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
weekly.remove('Friday')
weekly
['Monday','Tuesday','Wednesday','Thursday']
  • pop()
# 獲取元素後刪除,且pop()的,默認只爲-1,刪除尾元素,因此pop(0)=pop(-1),可以用pop(0)獲取並刪除首元素
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
weekly.pop()
'Friday'
weekly
['Monday','Tuesday','Wednesday','Thursday']
  • index():插入特定值的元素位置
#返回指定值的位置信息
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
weekly.index('Monday')
0
  • in():判斷存在
# 判斷Sunday是否在weekly中
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
'Sunday' in weekly
False
  • count():統計特定值的出現次數
weekly.count('Wednesday')
  • join()
    • 字符串方法的擴充,參見字符串方法中的join
  • sort()和sorted()
# sort對原列表進行排序,sorted對原列表生成副本後排序,原列表內容不變
marxes = ['Groucho','Chico','Harpo']
sorted_marxes = sorted(marxes)
sorted_marxes
['Chico','Groucho','Harpo']

marxes = ['Groucho','Chico','Harpo']
marxes.sort()
marxes
['Chico','Groucho','Harpo']
  • len()
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
a = len(weekly)
print(a)
5
  • in()
# 賦值後weekly = Weekly,改變其中一個,另一個隨之改變
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
Weekly = weekly
  • copy()
# copy()
# list()
#列表分片
#用以上方法產生的新列表和元列表沒有內在聯繫,即改變其中任何一個,其它的不受影響
a = [1,2,3]
b = copy(a)
c= list(a)
d = a[:]

a[0] = '100000000000'
b = [1,2,3]
c = [1,2,3]
d = [1,2,3]

元組(tuple)

  • 元組與序列類似,也是由任意元素組成的序列,但是元組一旦創建如同字符串,不可改變。

元組的創建

  • 使用()創建空元組
#創建空元組
empty_tuple = ()
()
  • 使用逗號’,'創建元組
#創建一個元素的元組,最後','不可省略
one_marx = 'martrix',
( 'martrix',)

#創建多個元素的元組,最後的','可省略
another_martx =  'martrix','array'
 ('martrix','array')
  • 元組解包(元組賦值操作)
another_martx =  'martrix','array'
a,b = another_martx
a 
'martrix'
b
'array'
元組解包的經典操作,交換變量的值
one = 'martrix'
two =  'array'
two,one = one,two
one
'array'
two
'martrix'
  • tuple創建
weekly = ['Monday','Tuesday','Wednesday','Thursday','Friday']
tuple(weekly)
('Monday','Tuesday','Wednesday','Thursday','Friday')
  • 元組的不可更改由其獨特的優點,在以後的應用中可以用到,但是一般情況下多用列表和字典。

字典(dict)

  • 字典中的元素順序無關緊要,通過不同的鍵(key)進行訪問,字典是可以改變的,和現實的字典類似。
  • 字典在其它的語言中被稱爲關係型數組,哈希表,哈希圖等。

字典的創建

  • 使用大括號{key:value}創建
#空字典
empty_dic = {}
#鍵值對的字典
one_dict = {"day1":study
"day2":paly
"day3":sleep
}
empty_dic
{"day1":study
"day2":paly
"day3":sleep
}
  • 使用dict()創建
#將包含雙值的子序列的序列轉換成字典,第一值爲鍵,第二個值爲值
one_list = [[1,'a'],[2,'b']]
dict(one_list)
{1:'a',2:'b'}
#可以將雙值的,雙字符,元組,列表化成字典。
tos = ('ab','cd','ef')
dict(tos)
{'c':'d','a':'b','e':'f'}

字典的相關操作

  • [key]儲存,訪問,添加或者修改元素
#儲存一個元素
d = {
    'one':123,
    'two':2,
    'three':3,
    'test':2
   }
 d2 = d['three']
 d2
 ['three':3]
#訪問一個元素,如果不存在會報錯
d = {
    'one':123,
    'two':2,
    'three':3,
    'test':2
   }
   d['one']
   123
#添加一個元素,然後修改這個元素
d = {
    'one':123,
    'two':2,
    'three':3,
    'test':2
   }
#添加元素'try':55
d['try'] = '55'
d
d = {
    'one':123,
    'two':2,
    'three':3,
    'test':2
    'try':55
   }
修改元素555
d['try'] = '5'

字典的函數

  • update()合併字典
  • del()刪除具有指定鍵的元素
  • clear()刪除所有元素,變成空字典
  • in()判斷是否存在
  • get()獲取鍵對應元素,[key]不同是,不會報錯
  • keys()獲取所有鍵
  • values()獲取所有值
  • item()獲取所有鍵值對
  • =賦值
  • copy()複製
    用法參見list

集合(set)

  • 集合和只剩下的鍵的字典類似,鍵與鍵之間不允許重複,類似數學中的集合,主要包括並、交等運算,且集合是無序的。

集合的創建

  • 用{}大括號將一系列用逗號隔開的值包裹起來。
  • 用set函數創建
  • 將其他類型轉換成集合
#空集合
empty_set = set()
empty_set
set()
#偶數集合
even_numbers = {0,2,4,6,8}
even_numbers
{0,2,4,6,8}
#轉換字符串,不包含重複的鍵
set('letters')
{‘l’,‘e’,‘t’,'r','s'#轉換列表
set(['Dasher','Dancer','Prancer','Mason-Dixon'])
{'Dasher','Dancer','Prancer','Mason-Dixon'}
#轉換元祖
set(('Monday','Tuesday','Wednesday','Thursday','Friday'))
{'Monday','Tuesday','Wednesday','Thursday','Friday'}
#轉換字典,注意只保留鍵
set({'apple':'red','flower':'blue','tree':'green'})
{'apple','flower','tree'}

集合的相關函數

  • 用in測試值是否存在
for name,contents in drinks.items():
	if 'vodka' in contents:
		print(name)

screwdriver
martini
black russin
white russin
#選擇vodka,但是不要vermouth,且不是cream
for name,contents in drinks.items():
if 'vodka' in contents and not ('vermouth' in contents or 'cream' in contents):
	print(name)
screwdriver
black russin
  • intersection() 或者& 獲取交集
drinks ='martini' : {'vodka','vermouth'}
	'black russin' : {'vodka','kahlua'}
	'white russin' : {'cream','kahlua','vodka'}
	'manhattan' : {'rye','vermouth','bitters'}
	'screwdriver' : {'orange juice','vodka'}for name,contents in drinks.items():
	if contents & {'vermouth','orange jucice'}
		print(name)
screwdriver
martini
manhattan

for name,contents in drinks.items():
	if 'vodka' in contents and not contents & {'vermouth','cream'}:
		print(name)
screwdriver
black russin

a和b的交集
a.intersection(b)

#bruss和wruss的交集
bruss = drinks['black russian']
wruss = drinks['white russian']
bruss & wruss
{'kahlua','vodka'}
  • union() 或者 | 函數獲取並集
  • different() 或者 - 獲得集合的並集
  • symmetric_difference() 或者 ^ 獲得異或集(只在兩個集合中出現一次)
  • issubset() 或者 <= 判斷一個集合是否是另一個集合的子集
  • < 判斷真子集
  • issupset() 或者 >= 判斷超集(超集的概念與子集相反)
  • 判斷真超集

總結

  • 使用方括號[]創建列表,使用逗號創建元祖,使用花括號{}創建字典,且都是通過方括號對單個元素進行訪問。
marx_list = ['Groucho','Chico','Harpo']
marx_tuple = 'Groucho','Chico','Harpo'
marx_dict = {'Groucho' : 'banjo','Chico' : 'pinao','Harpo' : 'harp'}
marx_list[2]
'Chico'
marx_tuple[2]
'Chico'
marx_dict['banjo']
'Chico'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章