如何使列表理解更具可读性?

2024-05-19 02:49:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在下面有一些代码,如果您是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])

Tags: 代码inrightnumberforifdefnot
1条回答
网友
1楼 · 发布于 2024-05-19 02:49:51

以下是一些改进:

  • 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)

相关问题 更多 >

    热门问题