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

时间:2018-02-15 19:40:29

标签: python list-comprehension

所以我在麻省理工学院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是一个'未解析的引用'。

这是我无法理解的时代之一吗?如果是这样,我怎么能告诉他们不必写出来呢?

1 个答案:

答案 0 :(得分:0)

  

这是我无法理解的时间吗?

不,你在这里遇到了几个问题:

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

完成所有修复后,这将作为原始代码使用:

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