簡體   English   中英

如何使列表推導更具可讀性?

[英]How to make list comprehensions more readable?

我在下面有這段代碼,如果您是 python 的新手,我認為這有點難以理解。

我將如何 go 使其對 python 的一組新手(學生)更具可讀性

def right_inwrongplace(userGuess, number):
    correct_places = [True if v == number[i] else False for i, v in enumerate(userGuess)]
    g = [v for  i, v in enumerate(userGuess) if not correct_places[i]]
    n = [v for  i, v in enumerate(number) if not correct_places[i]]
    return len([i for i in g if i in n])

以下是一些改進:

  • True if x else False只是bool(x)或者,正如您已經在進行比較,只是那個表達式,即v == number[i]
  • 由於您通過位置索引訪問數字,因此您只需zip兩個序列即可。

所以首先你會得到:

correct_places = [x == y for x, y in zip(userGuess, number)]

zip相同的論點適用於以下兩種理解(您可以再次遍歷原始字符串):

g = [x for x, y in zip(userGuess, number) if x != y]
n = [y for x, y in zip(userGuess, number) if x != y]

鑒於這兩次基本上是相同的理解,並且我們不再需要correct_places ,我們可以改為執行以下操作:

g, n = zip(*[(x, y) for x, y in zip(userGuess, number) if x != y])

然后你可以sum而不是len

return sum(x in n for x in g)

所以基本上你可以使用下面的代碼:

g, n  = zip(*(xy for xy in zip(userGuess, num) if xy[0] != xy[1])
return sum(x in n for x in g)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM