1. 程式人生 > 其它 >Python-列表相關面試題

Python-列表相關面試題

"""
3.1 反轉(判斷對稱)

如何判斷一個數組是對稱陣列:
要求:判斷陣列元素是否對稱。例如[1,2,0,2,1],[1,2,3,3,2,1]這樣的都是對稱陣列
用Python程式碼判斷,是對稱陣列列印True,不是列印False,如:
x = [1, "a",  0, "2", 0, "a", 1]
"""
def my_func(x):
    if x==x[::-1]:
        print(True)
    else:
        print(False)

my_func(x = [1, 'a',  0, '2', 0, 'a', 1])

x = [1, 'a',  0, '
2', 0, 'a', 1] print(x == x[::-1]) #切片 x = [1, 'a', 0, '2', 0, 'a', 1] print(list(reversed(x))) #反轉 print(x == list(reversed(x)))

""" 3.2列表切片 如果有一個列表a=[1,3,5,7,11] 問題:1如何讓它反轉成[11,7,5,3,1] 2.取到奇數位值的數字,如[1,5,11] """ a=[1,3,5,7,11] b = list(reversed(a)) print(b) #[11, 7, 5, 3, 1] print(a[::2]) #
[1, 5, 11]


""" 3.3列表大小排序 問題:對列表a 中的數字從小到大排序 a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 7, 8] """ a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 7, 8] print(sorted(a)) #[1, 1, 6, 6, 7, 8, 8, 8, 8, 9, 11] """ 3.4 取出最大值最小值 L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88] 找出列表中最大值和最小值 """ L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
print(sorted(L1)[-1]) print(max(L1))

""" 3.5 找出列表中單詞最長的一個 a = ["hello", "world", "vivi", "congratulations"] 找出列表中單詞最長的一個 """ a = ["hello", "world", "vivi", "congratulations"] print(max(a,key=lambda x:len(x)))

""" 3.6 切片取出列表中最大的三個數 取出列表中最大的三個值 L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88] """ L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88] print(sorted(L1)[-3:]) print(sorted(L1,reverse=True)[:3])

""" 3.7列表按絕對值排序 a = [1, -6, 2, -5, 9, 4, 20, -3] 按列表中的數字絕對值從小到大排序 """ a = [1, -6, 2, -5, 9, 4, 20, -3] print(a.sort(key=lambda x:abs(x))) print(sorted(a,key=lambda x:abs(x)))

""" 3.8按字串長度排序 b = ["hello", "helloworld", "he", "hao", "good"] 按list裡面單詞長度倒敘 """ b = ["hello", "helloworld", "he", "hao", "good"] print(sorted(b,key=lambda x:max(x),reverse=True))

""" 3.9去重與排序 L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88] 如何用一行程式碼得出[1, 2, 3, 5, 11, 33, 88] L2 = [1, 2, 3, 4, 5] ,L[10:]結果是多少(報錯?還是None,還是[]) """ L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88] print(list(dict.fromkeys(L1))) L2 = [1, 2, 3, 4, 5] print(L2[10:]) #[]越界


""" 3.10 去重保留順序 將列表中的重複值取出(僅保留第一個),要求保留原始列表順序 如a=[3, 2, 1, 4, 2, 6, 1] 輸出[3, 2, 1, 4, 6] """ #方法一: a=[3, 2, 1, 4, 2, 6, 1] print(sorted(set(a),key=lambda x: a.index(x))) #[3, 2, 1, 4, 6] #方法二: b = [] for i in a: if i not in b: b.append(i) print(b)


""" 3.11 列表合併 a = [1, 3, 5, 7] b = ['a', 'b', 'c', 'd'] 如何得到[1, 3, 5, 7, 'a', 'b', 'c', 'd'] """ a = [1, 3, 5, 7] b = ['a', 'b', 'c', 'd'] print(a.extend(b)) print(a)


""" 3.12 生成列表(列表推導式) 用一行程式碼生成一個包含 1-10 之間所有偶數的列表 """ print([j for j in range(1,11) if j%2==0])


""" 3.13 列表成員的平方 列表a = [1,2,3,4,5], 計算列表成員的平方數,得到[1,4,9,16,25] """ a = [1,2,3,4,5] print([j**2 for j in a])


""" 3.14 找出列表大於0的數 使用列表推導式,將列表中a = [1, 3, -3, 4, -2, 8, -7, 6] 找出大於0的數,重新生成一個新的列表 """ a = [1, 3, -3, 4, -2, 8, -7, 6] print([j for j in a if j >0])


""" 3.15統計列表有多少大於0 統計在一個佇列中的數字,有多少個正數,多少個負數,如[1, 3, 5, 7, 0, -1, -9, -4, -5, 8] """ a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8] print(len([j for j in a if j>0])) print(len([j for j in a if j<0]))


""" 3.16列表排除篩選 a = ["張三","張四","張五","王二"] 如何刪除姓張的 """ a = ["張三","張四","張五","王二"] #方法一 b = [] for i in a : if not i.startswith(""): b.append(i) print(b) #方法二 print([j for j in a if not j.startswith("")])


""" 3.18過濾列表中不及格學生(filter) 過濾掉列表中不及格的學生 """ a = [ {"name": "張三", "score": 66}, {"name": "李四", "score": 88}, {"name": "王五", "score": 90}, {"name": "陳六", "score": 56}, ] def my_func(x): return x.get("score") >= 60 print(list(filter(my_func,a)))


""" 3.19找出列表中最大數出現的位置 有個列表 a = [1, 2, 3, 11, 2, 5, 88, 3, 2, 5, 33] 找出列表中最大的數,出現的位置,下標從0開始 """ a = [1, 2, 3, 11, 2, 5, 88, 3, 2, 5, 33] print(a.index(max(a),0))


""" a = [ 'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I', 'need', 'skills', 'more', 'my', 'ability', 'are', 'so', 'poor' ] 找出列表中出現次數最多的元素 """ a = [ 'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I', 'need', 'skills', 'more', 'my', 'ability', 'are', 'so', 'poor' ] print(max(a,key=lambda x:a.count(x)))


""" 3.21分別統計列表中每個成員出現的次數 a = [ 'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I', 'need', 'skills', 'more', 'my', 'ability', 'are', 'so', 'poor' ] """ a = [ 'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I', 'need', 'skills', 'more', 'my', 'ability', 'are', 'so', 'poor' ] from collections import Counter print(Counter(a)) print(dict(Counter(a)))


""" 3.22 列表查詢元素位置 給定一個整數陣列A及它的大小n,同時給定要查詢的元素val, 請返回它在陣列中的位置(從0開始),若不存在該元素,返回-1。 若該元素出現多次請返回第一個找到的位置 如 A1=[1, "aa", 2, "bb", "val", 33] 或 A2 = [1, "aa", 2, "bb"] """ A1=[1, "aa", 2, "bb", "val", 33,"aa"] def my_func(j): if j in A1: print(A1.index(j,0)) #index預設返回元素第一個找到的位置 else: print("-1") my_func("bb")


""" 3.23列表查詢兩數之和 給定一個整數陣列nums 和一個目標值target ,請你在該陣列中找出和為目標值的那兩個整數,並返回他 們的陣列下標。 你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素不能使用兩遍。 示例: 給定nums=[2,7,11,15],target=9 因為nums[0] + nums[1] =2+7 = 9 所以返回[0, 1] """ nums=[2,7,11,15] target=9 for i in range(0,len(nums)): for j in range(i+1,len(nums)): if nums[i]+nums[j]==target: print([i,j])


""" 3.24二維陣列取值(矩陣) 有 a = [["A", 1], ["B", 2]] ,如何取出 2 """ a = [["A", 1], ["B", 2]] print(a[1][1])


""" 3.25 二維陣列拼接 a = [[1,2],[3,4],[5,6]] 如何一句程式碼得到 [1, 2, 3, 4, 5, 6] """ a = [[1,2],[3,4],[5,6]] s = [] for i in a: s += i print(s)


""" 3.26 列表轉字串 L = [1, 2, 3, 5, 6],如何得出 ‘12356’? """ L = [1, 2, 3, 5, 6] b = [str(i) for i in L] print(b) print(''.join(b))


""" 3.27 兩個列表如何得到字典 a = ["a", "b", "c"] b = [1, 2, 3] 如何得到 {‘a’: 1, ‘b’: 2, ‘c’: 3} """ a = ["a", "b", "c"] b = [1, 2, 3] print(dict(zip(a,b)))

""" 3.28列表按age從小到大排序 如下列表 people = [ {"name":"yoyo", "age": 20}, {"name":"admin", "age": 28}, {"name":"zhangsan", "age": 25}, ] 按年齡age從小到大排序 """ people = [ {"name":"yoyo", "age": 20}, {"name":"admin", "age": 28}, {"name":"zhangsan", "age": 25}, ] print(sorted(people,key=lambda x:x["age"]))



""" 3.29列表插入元素 現有 nums=[2, 5, 7] ,如何在該資料最後插入一個數字 9 ,如何在2後面插入數字0 """ nums=[2, 5, 7] print(nums.append(9)) print(nums) print(nums.insert(0,0)) print(nums)


""" 3.30打亂列表順序隨機輸出 有個列表a = [1, 2, 3, 4, 5, 6, 7, 8, 9] 如何打亂列表a的順序,每次得到一個無序列表 """ import random a = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(random.shuffle(a)) print(a)