我在下面有这段代码,如果您不熟悉python,我认为这很难理解。
我将如何使它对一群新接触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])
答案 0 :(得分:2)
以下是一些改进:
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)