1. 程式人生 > >python面試題(四)

python面試題(四)

一、資料型別

1、字典

1.1 現有字典 dict={‘a’:24,‘g’:52,‘i’:12,‘k’:33}請按字典中的 value 值進行排序?

sorted(dict.items(),key=lambda x:x[1])

1.2說一下字典和json的區別?

字典是一種資料結構,json是一種資料的表現形式,字典的key值只要能hash就行,json的則必須是字串

1.3什麼是可變型別,什麼是不可變型別?

可變不可變是指記憶體中的值是否可以被改變,不可變是指物件記憶體塊中的值是不可以被改變的,不可變型別有數值、字串、元組。可變型別則是可以改變的,可變型別有列表和字典。

1.4存入字典裡的資料有沒有先後順序?

存入字典中的資料不會自動排序,可以使用sort函式對字典進行排序。

1.5字典推導式?

dict={k:v  for (k,v) in iterable}

2、字串

2.1請反轉字串“sStr”

print("sStr"[::-1])

方法千萬種,其他的清自行腦補或搜尋

2.2 將字串”k:1|k1:2|k2:3|k3:4”,處理成Python字典:{k:1, k1:2, … } # 字 典裡的K作為字串處理

str1 = "k:1|k1:2|k2:3|k3:4"
def srt2dict(str1):
    dict
={} for items in str1.split("|"): k,v=items.split(":") dict[k]=v return dict print(srt2dict(str1))

2.3 請按alist中元素的age由大到小排序

alist=[{'name':'a','age':10},{'name':'b','age':20},{'name':'c','age':30}]
alist=[{'name':'a','age':10},{'name':'b','age':20},{'name':'c','age':30}]
def sort_by_age(alist): return sorted(alist,key=lambda x:x["age"],reverse=True) print(sort_by_age(alist))

3、列表

3.1 下面程式碼的輸出結果將是什麼?

list = ['a','b','c','d','e']
print(list[10:])

輸出是一個空列表

1. 上面的程式碼將輸出[],不會產生IndexError錯誤。就像所期望的那樣,嘗試用超出成員的個數的index
2. 來獲取某個列表的成員。
3. 例如,嘗試獲取list[10]和之後的成員,會導致IndexError。

3.2 寫一個列表生成式,產生一個公差為11的等差數列

print([x*11 for x in range(10)])

3.3 給定兩個列表,怎麼找出他們相同的元素和不同的元素?

list1 = [1,2,3]
list2 = [3,4,5]
list1 = [1,2,3]
list2 = [3,4,5]
set1 = set(list1)
set2 = set(list2)
print(set1&set2)
print(set1^set2)

3.4 請寫出一段Python程式碼實現刪除一個list裡面的重複元素?

l1 = ['b','c','d','b','c','a','a']

比較容易記憶的是用內建的set:

l1 = ['b','c','d','b','c','a','a']
print(list(set(l1)))

如果想要保持他們原來的排序:
用list類的sort方法:

l1 = ['b','c','d','b','c','a','a']
# print(list(set(l1)))
l2 = list(set(l1))
l2.sort(key=l1.index)
print(l2)

也可以這樣寫:

l1 = ['b','c','d','b','c','a','a']
l2 = sorted(set(l1),key=l1.index)
print(l2)

也可以使用遍歷:

l1 = ['b','c','d','b','c','a','a']
l2 = []
for i in l1:
    if not i in l2:
        l2.append(i)
print(l2)

3.5 給定兩個list A ,B,請用找出 A ,B中相同的元素,A ,B中不同的元素

1. A、B 中相同元素:print(set(A)&set(B))
2. A、B 中不同元素:print(set(A)^set(B))

3.6 有如下陣列list = range(10)我想取以下幾個陣列,應該如何切片?

1. [1,2,3,4,5,6,7,8,9]
2. [1,2,3,4,5,6]
3. [3,4,5,6]
4. [9]
5. [1,3,5,7,9]
6. 答: 1. [1:] 2. [1:7] 3. [3:7] 4. [-1] 5. [1::2]

3.7 下面這段程式碼的輸出結果是什麼?請解釋?

def extendlist(val, list=[]):
    list.append(val)
    return list
list1 = extendlist(10)
list2 = extendlist(123, [])
list3 = extendlist('a')
print("list1 = %s" %list1)
print("list2 = %s" %list2)
print("list3 = %s" %list3)
# 輸出結果:
# list1 = [10, 'a']
# list2 = [123]
# list3 = [10, 'a']