如何知道何时我不能使用列表理解?

2024-09-28 23:44:33 发布

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

所以我在麻省理工学院的compsci 6.00.1课上,当我在做手指练习和问题时,我会尽可能地使用列表理解法,到目前为止我已经能够做到了。你知道吗

从我的阅读中可以看出,你总是可以通过理解来写一个for循环,但是不是每个for循环都可以用于理解。你知道吗

我想知道什么时候不行什么时候可以?我是否需要写循环,然后试着理解它,看看它是否有效?在我试着理解它之前,有没有办法知道呢?你知道吗

示例:

def getAvailableLetters(lettersGuessed):

    from string import ascii_lowercase as letters

    letter_list = list(letters)
    for x in lettersGuessed:
        if x in letter_list:
            letter_list.remove(x)
    return ' '.join(letter_list)

print(getAvailableLetters(['a', 'b', 'x', 'z']))

理解力:

def getAvailableLetters(lettersGuessed):

    from string import ascii_lowercase as letters

    letter_list = list(letters)
    return ''.join(x for x in lettersGuesseed for x in letter_list if letter_list.remove(x))

print(getAvailableLetters(['a', 'b', 'x', 'z']))

现在,当我尝试理解时,它(我的IDE,pycharm)说第二个x是“未使用的局部变量”,而lettersGuessed是“未解析的引用”。你知道吗

这是我不能理解的一次吗?如果是的话,我怎么能不写出来就知道呢?你知道吗


Tags: infromimportforstringifdefas
1条回答
网友
1楼 · 发布于 2024-09-28 23:44:33

is this one of the times that i can't use comprehension?

不,这里有几个问题:

  • lettersGuesseed有一个拼写错误
  • 你的理解没有意义。为什么在if中使用letter_list.remove(x)?你知道吗

在所有修复之后,这将作为原始代码工作:

def getAvailableLetters(letters_guessed):

    from string import ascii_lowercase as letters

    letter_list = list(letters)
    return ' '.join([x for x in letter_list if x not in letters_guessed])

print(getAvailableLetters(['a', 'b', 'x', 'z']))

输出:

c d e f g h i j k l m n o p q r s t u v w y

相关问题 更多 >