【发布时间】:2020-02-20 04:32:30
【问题描述】:
我在下面有这段代码,如果你是 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])
【问题讨论】:
-
写普通循环有什么问题?
-
尝试使用
v == number[i]而不是True if v == number[i] else False -
您可以使用
index和value代替i和v使其更明确(也可以使用其他字母) -
初学者不理解“pythonic”就地列表创建循环。在 SO 上经常可以看到 - 有人用神秘的就地列表创建来回答 python 问题,然后 OP 做出响应。 “啊?!”。长期创建列表。同样正如@OferSadan 指出的那样,使用更有意义的变量名称 - 数字迭代器的
i很好,但v、g和n不是。代码 cmets 也在哪里? -
@Kingsley 我要补充一点,人们经常错误地认为将所有内容都转换为 列表理解 是 Python 的意思,但事实并非如此。如果有些东西是不可读的,那就不是 Pythonic!那是python的核心价值之一!可读性很重要!现在,简单的映射/过滤操作通常在 Python 上表示为列表推导式,但如果它变得笨拙,那么该语言结构的整个目的就会被颠覆。
标签: python python-3.x python-2.7 list list-comprehension