面試題(1)
阿新 • • 發佈:2018-12-31
1 . 列印結果為:
def Extend_List(val,a_list=[]):
list.append(val)
return list
list_1 = Extend_List(80)
list_2 = Extend_List(123,[])
list_3 = Extend_List('a')
print(list_1)
print(list_2)
print(list_3)
列印結果為:
[80,'a']
[123]
[80,'a']
2 . list去重:至少兩種方法
# -*- coding: utf-8 -*-
import itertools
def function1(alist):
# 方法一:使用set去重,缺點:無法保持原序
return list(set(alist))
def function2(alist):
# 方法二:使用itertools.groupby按分組顯示
alist.sort()
blist = []
it = itertools.groupby(alist)
for k, g in it:
blist.append(k)
return blist
def function3(alist):
# 方法三:使用新建列表去重,缺點:浪費記憶體
blist = []
for num in alist:
if num not in blist:
blist.append(num)
return blist
def function4(alist):
# 方法四:使用for迴圈去重重複元素,通過列表的count()方法來對元素計數,刪除計數大於1的重複元素
for x in alist:
while alist.count(x) > 1:
del alist[alist.index(x)]
return alist
def function5(alist):
# 方法五:使用字典的fromkeys方法重複元素
alist = {}.fromkeys(alist).keys()
return alist
def main():
alist = [1, 2, 3, 43, 5, 3, 2, 3, 100, 100, 700, 100, 43, 2, 3, 1, 3, 100]
print(function1(alist))
print(function2(alist))
print(function3(alist))
print(function4(alist))
print(function5(alist))
if __name__ == '__main__':
main()
結果:
[1, 2, 3, 100, 5, 43, 700]
[1, 2, 3, 5, 43, 100, 700]
[1, 2, 3, 5, 43, 100, 700]
[1, 2, 3, 5, 43, 100, 700]
dict_keys([1, 2, 3, 5, 43, 100, 700])
3 . 怎樣拷貝一個物件
1.淺拷貝 :
使用copy.copy,它可以進行物件的淺拷貝(shallow copy),它複製了物件,但對於物件中的元素,依然使用引用(換句話說修改拷貝物件元素,則被拷貝物件元素也被修改)
2.深拷貝 :
使用copy.deepcopy,它可以進行深拷貝,不僅拷貝了物件,同時也拷貝了物件中的元素,獲得了全新的物件,與被拷貝物件完全獨立,但這需要犧牲一定的時間和空間。
3.特殊拷貝:
如要複製列表L,使用list(L),要複製一個字典d,使用dict(d),要複製一個集合s,使用set(s)。
總結一下的話:如果你要複製某個物件object, 它屬於python內建的型別type,那麼你可以使用type(object)來 獲得一個拷貝。
對於不可變型別的物件如tuple,常數等,拷貝的始終是引用
import copy
list = [1, 2, 3, 4, ['a', 'b']] #原始物件
b = list #賦值,傳物件的引用,依然指向list
c = copy.copy(list) #物件拷貝,淺拷貝(元素依然是共享的引用)
d = copy.deepcopy(list) #物件拷貝,深拷貝
list.append(5) #修改物件list
list[4].append('c') #修改物件list中的['a', 'b']陣列物件
print 'list = ', list
print 'b = ', b
print 'c = ', c
print 'd = ', d
輸出結果:
list = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
4 . 寫一個指定長度的斐波那契數列
def fibo(num):
if num <= 0:
return []
elif num <= 1:
return [1]
else:
list_fibo = [1, 1]
for i in range(num - 2):
list_fibo.append(list_fibo[i] + list_fibo[i+1])
return list_fibo
if __name__ == '__main__':
fibo_list = fibo(0)
print(fibo_list)
fibo_list = fibo(1)
print(fibo_list)
fibo_list = fibo(2)
print(fibo_list)
fibo_list = fibo(20)
print(fibo_list)
結果:
[]
[1]
[1, 1]
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
5 . 如何將str= “k1=1|k2=2|k3=3|k4=4”轉換成一個字典
str = "k1=1|k2=2|k3=3|k4=4"
dict = {}
for i in str.split('|'):
dict[i.split('=')[0]] = int(i.split('=')[1])
print(dict)