文章目錄
序言
-
此文章針對有一定基礎的人,簡明扼要的介紹字符串、列表、元組、字典、集合的概念和常用操作,以備複習鞏固之用。
-
底層的基本數據類型:布爾型,整形,浮點型以及字符串類型。
-
基本數據類型組合起來稱之爲數據結構。
- 數據結構:列表、元組、字典、集合。
序列
- 序列:一系列元素以它們所處的位置爲索引,以第一個到最後一個依次編號就組成一個序列。
- 序列結構:字符串、元組和列表都是序列結構,但是它們又有各自的特點。
- 元組和列表與字符串不同的是,元組和列表並不是求所含元素的種類相同,每個元素都可以是任何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
}
修改元素55爲5
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'