今天的面試題以基礎為主,去面試Python工程師,這幾個基礎問題不能答錯
第1題:列表和元組有什麼不同?
列表和元組是Python中最常用的兩種資料結構,字典是第三種。
相同點:
- 都是序列
- 都可以儲存任何資料型別
- 可以通過索引訪問
語法差異
使用方括號[]
建立列表,而使用括號()
建立元組。
是否可變
列表是可變的
,而元組是不可變的
,這標誌著兩者之間的關鍵差異。
重用與拷貝
元組無法複製。 因為元組是不可變的,所以執行tuple(tuple_name)
將返回自己
記憶體開銷
Python將低開銷的較大的塊分配給元組,因為它們是不可變的。
列表則分配小記憶體塊
。
與列表相比,元組的記憶體更小。 '
當你擁有大量元素時,元組比列表快。
列表的長度是可變的。
第2題:什麼是負索引?
Python中的序列索引
可以是正也可以是負
如果是正索引,0是序列中的第一個索引,1是第二個索引。 如果是負索引,-1是最後一個索引,-2是倒數第二個索引。
lst=[11,22,33,44,55]
複製程式碼
全取列表
>>> lst[:]
[11, 22, 33, 44, 55]
複製程式碼
取不到最後一個元素
>>> lst[:-1] # 注意這裡不能輸出55,因為切片操作都是左閉右開的
[11, 22, 33, 44]
複製程式碼
列表倒序
>>> lst[::-1]
[55, 44, 33, 22, 11]
複製程式碼
取最後一個
>>> lst[-1]
55
複製程式碼
取第一個
>>> lst[0]
11
複製程式碼
第3題: 如何隨機打亂列表中元素,要求不引用額外的記憶體空間?
用 random 包中的 shuffle() 函式來實現
import random
random.shuffle(你的列表)
# 舉個例子:
L1 = [1, 3, 5, 7]
random.shuffle(L1)
複製程式碼
第4題:解釋 Python 中的 join() 和 split() 函式?
join() 函式可以將指定的字元新增到字串中
‘1,2,3,4,5’
複製程式碼
a=','.join('123456')
print(a)
print(type(a))
#1,2,3,4,5,6
#<class 'str'>
複製程式碼
split() 函式可以用指定的字元分割字串
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
複製程式碼
a='1,2,3,4,5,6'.split(',')
print(a)
print(type(a))
#['1', '2', '3', '4', '5', '6']
#<class 'list'>
複製程式碼
第5題:如何刪除字串中的前置空格?
- strip():把頭和尾的空格去掉
- lstrip():把左邊的空格去掉
- rstrip():把右邊的空格去掉
- replace('c1','c2'):把字串裡的c1替換成c2。故可以用replace(' ','')來去掉字串裡的所有空格
- split():通過指定分隔符對字串進行切片,如果引數num 有指定值,則僅分隔 num 個子字串
- re.split(r'\s+', 'a b c') # 使用正規表示式
第6題:Python 中的 pass 語句有什麼作用?
在編寫程式碼時只寫框架思路,具體實現還未編寫就可以用 pass 進行佔位,使程式不報錯,不會進行任何操作。
比如:
while False:
pass
複製程式碼
pass通常用來建立一個最簡單的類:
class MyEmptyClass:
pass
複製程式碼
pass在軟體設計階段也經常用來作為TODO,提醒實現相應的實現,比如:
def readtxt(*args):
pass # to do list
複製程式碼
第7題:解釋 Python 中的成員運算子?
成員運算子
in 是判斷是否包含
通過成員運算子‘in’ 和 ‘not in’,確認一個值
是否是另一個值
的成員。
print('me' in 'disappointment')#True
print('us' in 'disappointment')#False
複製程式碼
身份運算子
is 是判斷記憶體地址
- is 是判斷兩個識別符號是不是引用自一個物件
- is not 是判斷兩個識別符號是不是引用自不同物件
tops: in 的 not 在前,is 的 not 在後