[英]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.