函数中的列表理解

时间:2019-02-23 12:06:04

标签: python

因此,我正在尝试为一个hang子手游戏编写一个函数,该函数将返回由小写英文字母组成的字符串-所有未使用letterGuessed的小写英文字母。我看不到让列表理解功能正常工作

def getAvailableLetters(lettersGuessed):
    '''
    lettersGuessed: list, what letters have been guessed so far
    returns: string, comprised of letters that represents what letters have not
      yet been guessed.
    '''

    [letterGuessed.remove(letter) if letter in'abcdefghijklmnopqrstuvwxyz' for letter in lettersGuessed ]

3 个答案:

答案 0 :(得分:1)

[letter for letter in 'abcdefghijklmnopqrstuvwxyz' if letter not in lettersGuessed]

要详细说明为什么这样做,可以考虑并列出以下内容:

[ expression for item in list if conditional ]

在我们的例子中,list是字母。 我们的expression只是list中的单个字母,而我们的conditionallettersGuessed中不存在的字母。

令人高兴的是,它几乎可以翻译成英文句子,应该易于理解。

  

如果字母不在猜字母列表中,请给我每个字母

我建议您通读这篇文章,因为对列表理解有很好的了解将为您的python编码带来巨大的好处。 https://www.pythonforbeginners.com/basics/list-comprehensions-in-python

答案 1 :(得分:0)

需要扩展@scoJo的回复,这是我的看法。

import string    

test_guesses = ['a','b','f']

def getAvailableLetters(lettersGuessed):
    # Note that we're ensuring that input letters are lowercase when being compared to the list.
    return ''.join([i for i in string.ascii_lowercase if i.lower() not in lettersGuessed])

在原始答复中,您是从猜测字母列表中删除字母,而不是字母。

我的解决方案还利用Python的字符串标准库来创建字母列表,而不必确保您键入了每个字母。

如果要返回列表,只需删除.join()函数。

输入:

getAvailableLetters(test_guesses)

输出:

'cdeghijklmnopqrstuvwxyz'

答案 2 :(得分:0)

为简单起见,我建议使用Python sets

集合是“独特元素的无序集合”

TypeError: context must be a dict rather than ReturnList.

这样,您可以做一个简单的减法来检索可用字母的列表,然后将此列表连接到单个字符串。

无需手动迭代

注意:如果要保留仍然可用的字母的排序顺序,请在返回字符串之前使用Python的sort函数

<iframe
    src="http://mywebsite.com"
    style="border:0px #ffffff none;"
    name="myiFrame"
    scrolling="no"
    frameborder="1"
    marginheight="0px"
    marginwidth="0px"
    height="400px"
    width="600px"
    allowfullscreen
></iframe>