千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > python面試題,一道題考察Python基礎(chǔ)能力

python面試題,一道題考察Python基礎(chǔ)能力

來源:千鋒教育
發(fā)布人:小千
時間: 2021-01-07 16:11:00 1610007060

一道面試題就能檢驗出你的Python基礎(chǔ)如何,想知道題目是什么嗎?往下看

問:將 data 轉(zhuǎn)換成 new_data 這種形式,寫出轉(zhuǎn)換過程

1

可以看出,轉(zhuǎn)換的過程是將 key 的下劃線進行拆分,然后下劃線后邊的字符嵌套在前面字符的值中。

感興趣就打開 IDE,自己先試著解一下。

解題思路

你應(yīng)該很快想到,主要思路是將下劃線 split 后,然后依次使用字符生成內(nèi)層字典,當(dāng)達到最后一個字符時將數(shù)字作為值。

那么關(guān)鍵點在于,如何不斷地獲得內(nèi)層字典去修改呢?實際本題就是考察你是否理解 Python 字典是引用傳遞這個特性。

什么是引用傳遞?我們知道 Python 中字典和列表對象都是可變對象,同一個字典對象的變量不管如何傳遞,只要改變其中一個變量會同步修改其他變量。這是因為變量存儲的只是可變對象的引用,無論調(diào)用哪個變量,返回的依然是同一個對象。比如:

2

如上,利用這個特性,將內(nèi)層字典賦值給一個中間變量,然后改變這個中間變量,即可同步修改最終的 new_data 變量。

根據(jù)這個思路,初步代碼如下:

3

這也是群友給出的第一版答案,這樣寫并沒有多大問題,但是代碼比較繁瑣,肯定還有優(yōu)化空間。

我們可以只使用一個中間變量即可,進一步優(yōu)化:

4

上面這個代碼看似很簡潔了,但是仍然還有兩個 if 判斷,如果不是使用了三元表達式的話,還會更多行。

所以可以進一步優(yōu)化:

5

我們省略掉了 last 來判斷最后一個字符的索引,直接通過 keys[:-1] 避開最后一個字符,末尾再單獨生成數(shù)字鍵值對。

這里還使用字典的一個內(nèi)置方法 —— setdefault。

dict.setdefault(key, default=None) 方法和 get 方法類似,只是如果鍵不存在于字典中,不僅會返回 default 參數(shù)的值,還同時會用該值自動生成一個鍵值對。

6

最終我們使用了 6 行代碼就解出該題,這也是接近最簡代碼。

如果使用字典引用的特性是合格分的話,那么當(dāng)你用出 setdefault 這個方法后,面試官已經(jīng)給你打了優(yōu)秀,因此一定要熟悉基礎(chǔ)數(shù)據(jù)對象的所有內(nèi)置方法。

最后歡迎大家添加我們的Python技術(shù)交流qq群:790693323 加群找管理免費領(lǐng)取學(xué)習(xí)資料和項目代碼,等你來哦~~~

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
USB Type C電纜正反插都可以?

USB Type C電纜正反插都可以USB Type C電纜是一種通用連接標(biāo)準(zhǔn),其最顯著的特點是具備正反插功能。不論插頭的方向如何,用戶都可以輕松插入USB ...詳情>>

2023-10-14 04:31:18
為什么sql語句不支持關(guān)系代數(shù)中的除法?

為什么SQL語句不支持關(guān)系代數(shù)中的除法1. SQL和關(guān)系代數(shù)的關(guān)系:SQL是一種基于關(guān)系代數(shù)的查詢語言,它的設(shè)計初衷是為了能夠以一種更接近自然語言...詳情>>

2023-10-14 04:07:35
sql 怎么根據(jù)父id查詢下三級子集?

一、概述處理樹形數(shù)據(jù)時,我們常常需要根據(jù)父ID查詢其下的子集。本文將引導(dǎo)您如何使用SQL進行這一操作,尤其是查詢下三級子集。二、查詢方法詳...詳情>>

2023-10-14 03:59:07
什么是分治算法,和遞歸有什么關(guān)系?

分治算法是什么分治算法是一種算法設(shè)計思想,其主要思想是將一個復(fù)雜的問題分解為兩個或更多相同或相似的子問題,直到子問題簡單到可以直接解決...詳情>>

2023-10-14 03:22:51
為什么微服務(wù)一定要上Docker?

為什么微服務(wù)一定要上Docker微服務(wù)作為一種軟件架構(gòu)模式,需要考慮的因素包括服務(wù)的獨立性、可擴展性、可維護性和可移植性等。這其中,Docker的...詳情>>

2023-10-14 03:15:33