今天的面試題以基礎為主,去面試Python工程師,這幾個基礎問題不能答錯 第1題:列表和元組有什麼不同? 列表和元組是Python中最常用的兩種數據結構,字典是第三種。 相同點: 都是序列 都可以存儲任何數據類型 可以通過索引訪問 語法差異 使用 創建列表,而 創建元組。 是否可變 列表是 ,而元組 ...
今天的面試題以基礎為主,去面試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 在後