天天看點

面試Python必會的的基礎知識:清單、元組、字典、集合的差別

目錄

前言:

一、以表格的形式展示他們的差別:

二、清單、元組、字典、集合的定義區分:

1、清單的定義:

2、元組的定義:

3、字典的定義:

4、集合的定義:

三、清單、元組、字典、集合的方法(函數):

1、清單的方法:

2、元組的方法:

3、字典的方法:

4、集合的方法:

四、清單、元組、字典、集合之間的比較:

1、元組和清單差別

2、字典和清單差別

3、集合和字典的差別

五、推導式建立序列:

1、清單推導式,文法如下:

2、字典推導式,文法如下:

3、集合推導式,文法如下:

4、元組沒有推導式:

前言:

面試Python時,如果把清單、元組、字典以及集合之間的差別,這個基礎的知識點講解清楚,就能反映出面試者的基礎水準,也必定會給面試官一個很好的印象。我們開始來闡述他們差別。

一、以表格的形式展示他們的差別:

清單 元組 字典 集合
英文 list tuple dict set
是否可讀寫 讀寫 隻讀 讀寫 讀寫
是否可重複 可以 可以 可以 不可以
存儲方式 鍵值對(鍵不可以重複) 鍵(不能重複)
是否有序 有序 有序 無序,自動正序 無序
初始化 [1, 'aa'] ('aa', 'bb') {‘a’: 1, 'b': 2} set([1, 2])或{‘a’, 'b'}
添加 append 隻讀 d[key] = 'value' add
讀元素 l[1] t[1] d['a']

二、清單、元組、字典、集合的定義區分:

1、清單的定義:

list是存儲在方括号中的一組有序元素的資料結構,清單中的元素是可以添加、修改、删除、還可以查詢其中的元素。清單是可變、可嵌套的資料類型。python裡的清單用“[]”表示:

test_list = [1, 2, 3, 4]
print(test_list[0]) # 搜素其中某一項
# 1
test_list[1] = 'aa' # 修改某一項
print(test_list)
# [1, 'aa', 3, 4]
test_list.append('花花') # 添加一項
print(test_list)
# [1, 'aa', 3, 4, '花花']
test_list.extend('華晨宇') # 添加一項
print(test_list)
# [1, 'aa', 3, 4, '花花', '華', '晨', '宇']
           

2、元組的定義:

元組和清單類似,是存儲在圓括号中一組有序不可修改的元素的序列,隻可查詢其中的元素。通常情況下,元組用于儲存無需修改的内容。Python裡的元組用“()”表示:

需要注意的一點是,當建立的元組中隻有一個字元串類型的元素時,該元素後面必須要加一個逗号‘,’,否則 Python 解釋器會将它視為字元串。

t_tuple = ('故宮', '長城', '香山')
t_tuple
# ('故宮', '長城', '香山')
print(type(t_tuple))
# <class 'tuple'>
t2 = ('天壇')
t3 = ('頤和園',) # 當元組中隻有一個元素時,需要加一個逗号,否則Python解釋器認為是字元串。
print(type(t2), type(t3))
# <class 'str'> <class 'tuple'>
           

3、字典的定義:

字典是一種可變的容器模型,且可存儲任意類型的對象。元素由鍵(key)和值(value)組成的鍵值對 ,元素之間用逗号“,”分隔,鍵與值之間用冒号“:”隔開。

鍵必須是不可變且唯一的,如字元串,數字或元組,但值可以重複,值可以取任何資料類型。Python裡的元組用“{}”表示:

d_dict = {1: 'a', 2: 'b', 3: 'c'}
print(type(d_dict))
# <class 'dict'>
           

4、集合的定義:

與字典類似,但隻包含鍵,而沒有對應的值,包含的資料不重複。

s_set = {1, 2, 3}
print(type(s_set))
# <class 'set'>
           

三、清單、元組、字典、集合的方法(函數):

1、清單的方法:

方法(函數) 作用 具體的方法描述
list.append(x) 增加元素 将元素x增加到清單list尾部
list.extend(alist) 增加元素 将清單alist所有元素增加到清單list尾部
list.insert(index,x) 增加元素 将清單list指定位置index處插入元素x
list.remove() 删除元素 在清單list中删除首次出現的指定元素x
list.pop([index]) 删除元素 删除并傳回清單list指定位置index處的元素,預設是最後一個元素
list.clear() 删除所有元素 删除清單list中所有元素,并不是删除清單對象
list.count(x) 計數 傳回指定元素x在清單list中出現的次數
len(list) 清單長度 傳回清單中包含元素的個數
list.reverse() 翻轉清單 所有元素原地翻轉
list.sort() 排序 所有元素原地排序
list.copy() 淺拷貝 傳回清單對象的淺拷貝

舉例說明:

t_list = [1, 2]
t_list.append('python')  # append()函數是1個參數,為要添加的元素。
t_list
# [1, 2, 'python']
t_list.extend(['java', 'go'])  # extend()函數也是1個參數,可以多個元素,但是必須寫成清單的形式。
t_list
# [1, 2, 'python', 'java', 'go']
t_list.insert(1, 'linux')
t_list
#  [1, 'linux', 2, 'python', 'java', 'go']
t_list.remove(2)
t_list
#  [1, 'linux', 'python', 'java', 'go']
t_list.pop()
# 'go'
t_list
# [1, 'linux', 'python', 'java']
t_list.pop(0)
Out[13]: 1
t_list
Out[14]: ['linux', 'python', 'java']
t_list.clear()
t_list
# []
           
my_list = [1, 2, 3, 'a', 'b', 'c', 1, 2, 3]
my_list.count(3)
# 2
len(my_list)
# 9
my_list.reverse()
my_list
# [3, 2, 1, 'c', 'b', 'a', 3, 2, 1]
list1 = [1, 5, 3, 6, 2]
list1.sort()  # sort()排序時要保證清單是相同類型的元素,否則無法比較大小而排序。
list1
# [1, 2, 3, 5, 6]
list2 = list1.copy()  # copy()淺拷貝是隻複制數值,不複制架構、類等。
print(list2)
[1, 2, 3, 5, 6]
           

2、元組的方法:

(1.)建立元組:

t_1 = ('故宮', '長城', '香山')
t_2 = ('頤和園',) # 當元組中隻有一個元素時,需要加一個逗号,否則Python解釋器認為是字元串。
           

(2.)合并元組:

t_1 = ('故宮', '長城', '香山')
t_2 = ('頤和園',)
t_3 = t_1 + t_2
t_3
#  ('故宮', '長城', '香山', '頤和園')
           

(3.)删除元組:(t_3已經删除不存在,所有報錯)

面試Python必會的的基礎知識:清單、元組、字典、集合的差別

注:元組的基本操作與清單的操作一緻,除了不能修改元組本身外。

3、字典的方法:

(1.)字典的建立:

dict1 = {'a': 12, 'b': 16, 'b': 18}
dict1
# {'a': 12, 'b': 18}  # 因為鍵存在相同,是以後面的鍵值替換了前面的鍵值
           

(2.)通路字典中的值:

面試Python必會的的基礎知識:清單、元組、字典、集合的差別

(3.)修改字典:

dict1['a'] = 666
dict1
# {'a': 666, 'b': 18}
           

(4.)删除字典元素,能删單一的元素也能清空字典,并且可以直接删除字典:

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict1
# {'a': 1, 'b': 2, 'c': 3}
del dict1['b']
dict1
# {'a': 1, 'c': 3}
dict1.clear()
dict1
# {}
del dict1
dict1
Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-35-e36219336d90>", line 1, in <module>
           
面試Python必會的的基礎知識:清單、元組、字典、集合的差別

(5.)pop()删除指定鍵值對,并傳回對應的“值對象”

(6.)popitem() :随機删除和傳回該鍵值對。字典是“無序可變序列”,是以沒有第一個元素、最後一個元素的概念;popitem 彈出随機的項,因為字典并沒有"最後的元素"或者其他有關順序的概念。若想一個接一個地移除并處理項,這個方法就非常有效(因為不用首先擷取鍵的清單)。

a = {1: 'aaa', 2: 'bbb', 3: 'ccc', 4: 'ddd', 5: 'eee'}
print(a)
# {1: 'aaa', 2: 'bbb', 3: 'ccc', 4: 'ddd', 5: 'eee'}
a.pop(2)
# Out[13]: 'bbb'
print(a)
# {1: 'aaa', 3: 'ccc', 4: 'ddd', 5: 'eee'}
print(a.popitem())
# (5, 'eee')
print(a)
# {1: 'aaa', 3: 'ccc', 4: 'ddd'}
           
面試Python必會的的基礎知識:清單、元組、字典、集合的差別

(7)Python字典包含了以下内置函數:

cmp(dict1, dict2)  #比較兩個字典元素。
len(dict)          #計算字典元素個數,即鍵的總數。
str(dict)          #輸出字典可列印的字元串表示。
type(variable)     #傳回輸入的變量類型,如果變量是字典就傳回字典類型。 
           

(8)Python字典包含了以下内置方法:

dict.clear()                         #删除字典内所有元素
dict.copy()                          #傳回一個字典的淺複制
radiansdict.fromkeys()               #建立一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值
dict.get(key, default=None)        #傳回指定鍵的值,如果值不在字典中傳回default值
dict.has_key(key)                  #如果鍵在字典dict裡傳回true,否則傳回false
dict.items()					     #以清單傳回可周遊的(鍵, 值) 元組數組
dict.keys()                  #以清單傳回一個字典所有的鍵
dict.values()                   #以清單傳回字典中的所有值
dict.setdefault(key, default=None)   #和get()類似, 但如果鍵不已經存在于字典中,将會添加鍵并将值設為default
dict.update(dict2)                 #把字典dict2的鍵/值對更新到dict裡
           

4、集合的方法:

s1 ={3, 8, 'apple', 'dog'}
# 判斷元素是否在集合中
'apple' in s1
# Out[4]: True
'banana' in s1
# Out[5]: False
# 将值添加到集合中,如果值存在,則不作任何操作
s1.add('cat')
s1
# Out[8]: {3, 8, 'apple', 'cat', 'dog'}
# 删除元素
s1.remove(8)
s1
Out[12]: {3, 'apple', 'cat', 'dog'}
s1.remove(0) # 如果元素不存在會發生錯誤
Traceback (most recent call last):
  File "D:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-13-3f824745aed8>", line 1, in <module>
    s1.remove(0)
KeyError: 0
# 這種方式如果元素不存在不會發生錯誤
s1.discard(2)
s1
# Out[15]: {3, 'apple', 'cat', 'dog'}
# 計算集合中元素的個數
len(s1)
# Out[17]: 4
#清空集合
s1.clear()
s1
# Out[20]: set()
           

四、清單、元組、字典、集合之間的比較:

1、元組和清單差別

  • 元組比清單操作速度快; 
  • 元組對資料“寫保護“ ;
  • 元組可用于字元串格式化中 ;
  • 元組可作為字典的key;

2、字典和清單差別

  • 字典的查找和插入的速度極快,不會随着key的增加而增加 ;
  • 但是字典需要占用大量的記憶體,記憶體浪費多; 
  • 清單的查找和插入的時間随着元素的增加而增加;
  • 但是清單的占用空間小,浪費記憶體很少; 
  • 是以,dict是用空間來換取時間的一種方法。

3、集合和字典的差別

  • 集合和字典的唯一差別僅在于沒有存儲對應的value; 
  • 結合和字典的原理一樣,同樣不可以放入可變對象,因為無法判斷兩個可變對象是否相等,也就無法保證set内部“不會有重複元素”。

五、推導式建立序列:

        推導式是從一個或者多個疊代器快速建立序列的一種方法。它可以将循環和條件判斷結合,進而避免冗長的代碼。推導式是典型的 Python 風格。

1、清單推導式,文法如下:

  • [表達式foritemin 可疊代對象 ]或者:[表達式foritemin 可疊代對象if條件判斷]
[x for x in range(0,10)]
Out[21]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[x for x in range(1,20) if x%5==0]
Out[22]: [5, 10, 15]
cells = [(row,col) for row in range(0,5) for col in range(11,15)] # 多個for循環
for cell in cells:
    print(cell)
           
面試Python必會的的基礎知識:清單、元組、字典、集合的差別

2、字典推導式,文法如下:

  • {key_expression:value_expressionfor表達式in可疊代對象}類似于清單推導式,字典推導也可以增加 if 條件判斷、多個 for 循環。

統計文本中字元出現的次數:

text = ' i love you, i love china, i love niuniuxiaoai'
char_count = {c:text.count(c) for c in text}
char_count
           
面試Python必會的的基礎知識:清單、元組、字典、集合的差別

3、集合推導式,文法如下:

  • {表達式foritemin 可疊代對象 }或者:{表達式foritemin 可疊代對象if條件判斷}
{x for x in range(1,100) if x%9==0}
# Out[28]: {9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99}
           
面試Python必會的的基礎知識:清單、元組、字典、集合的差別

4、元組沒有推導式: