【发布时间】:2020-05-27 17:00:55
【问题描述】:
我正在尝试编写一个函数,它返回一个字符串而不是 lettersGuessed
words = list('abcdefghijklmnopqrstuvwxyz')
def getAvailableLetters(lettersGuessed):
[words.remove(letter) for letter in words if letter in lettersGuessed]
return ''.join([str(elem) for elem in words])
然后我调用我的函数
getAvailableLetters(['e', 's', 'i', 'k', 'p', 'r'])
但结果与我的预期不同。 我的输出:
'abcdfghjlmnoqstuvwxyz'
# the letter 's' in the output, but it shouldn't be there.
正确的输出:
'abcdfghjlmnoqtuvwxyz'
我做错了什么?
【问题讨论】:
-
迭代时不要移除元素。这将导致意想不到的行为。您可以遍历副本并删除元素。即
for letter in words[:]:words.remove(letter)。也不需要建立列表[words.remove(letter) for letter in words[:] if letter in lettersGuessed]。remove是就地操作,不会产生值。所以你实际上是在构建一个None值列表。 -
您在迭代列表的同时修改列表,这意味着您将跳过列表中的某些值。改用
return ''.join(l for l in words if l not in lettersGuessed)之类的方法
标签: python string list if-statement list-comprehension