2010-09-28 26 views
3

今天偶然發現,認爲它可能值得討論。有趣的Python成語,用於刪除單個條目列表中的唯一項目

Python的成語採取單 項目從列表中

有時會發生在代碼中,我 有一個列表,讓我們稱之爲stuff,並 我肯定知道這個名單 正好包含一個項目。我想 得到這個項目,並把它放在一個 變量,稱之爲事情。什麼是 這樣做的最好方法?在過去,我 用來做這個:

thing = stuff[0] 

但我認爲這不是最好的成語。我想出了一個更好的 :

(thing,) = stuff 

爲什麼這一個更好?

可讀性:它讓讀者知道 東西只有一個元素。

免費斷言:它使Python的斷言 是stuff有且只有一個元素,所以 ,如果我錯了,我原來 假設stuff有且只有一個 元素,Python會在我喊 在此之前表現作爲 難以發現的錯誤 程序中的其他地方。

不容錯過:之前的 方法最後有[0]。現在, 很容易注意到一行 簡稱thing = stuff[0]。但是,如果 線是東西凌亂像 這樣:

thing = some_dict[my_object.get_foobar_handler()][0] 

在這種情況下,[0]到底是 容易錯過,因爲當隨便 一眼代碼,它似乎 連接到該函數調用或 字典查找。所以讀者可能會錯過 這個事實,我們在這裏列出一個列表項目列表 。這將是在這種情況下更好 :

(thing,) = some_dict[my_object.get_foobar_handler()] 

一般用於任何「收藏」(道具 Ulrik合作的指出這一點):此方法 工作,即使東西是一組或任何 其他種類的採集。 stuff[0] 不能在一組上工作,因爲組 不支持通過索引 號碼訪問。玩得開心編程!

http://blog.garlicsim.org/post/1198230058/python-idiom-for-taking-the-single-item-from-a-list

在一般情況下,我已經撕破的想法。他對自由斷言和可讀性提出了令人信服的論點(如果它成爲一種模式)。另一方面,直到/如果它變得流行,它有點難以閱讀。

社區有什麼想法?

+0

沒有暗示優點或以其他方式,只是想我會提到這一點,也可以不帶括號:'事,= stuff'。 – MattH 2010-09-28 12:57:53

+1

@Matth:但是最後的逗號(無parens)也很容易忽略。 – delnan 2010-09-28 13:41:33

回答

7

博客海報希望單個語句的功能如下:(1)從列表中提取項目,(2)聲明,(3)作爲評論告訴用戶該列表只有一個項目。

我儘量減少代碼的行數的一個巨大的風扇,但我更喜歡極大以下:

assert len(stuff) == 1, "stuff should have length 1 but has length %d" % len(stuff) 
thing = stuff[0] 

明確優於隱式。

+0

+1:斷言通常是必需的。令人驚訝的是經常。你可能會認爲你知道它有一個元素。但你在其他地方有問題。 – 2010-09-28 14:50:53

2

我喜歡:

[thing] = stuff 

如果僅僅是因爲我覺得(thing,)是醜陋的。但我喜歡這個概念。

0

一個人可能會錯過自己的逗號,我寧願將東西放在括號(和逗號)的東西上。

我想我目前有線寫thing = stuff[0]