Python中列表理解的困难

时间:2018-11-27 13:42:13

标签: python list list-comprehension

对于在线课程,我想创建一个称为censor的函数,该函数将两个字符串作为输入(文本和单词),并返回所选单词由星号替换的文本。 示例:

censor("this hack is wack hack", "hack")

应返回:

"this **** is wack ****"

使用for循环,我可以使用该函数,但是我想通过列表理解来实现它,但似乎无法使其正常工作。

def censor(text, word):
    words = text.split()
    result = ''
    censored = '*' * len(word)
    [censored if i == word else i for i in words]
    result =' '.join(words)
    return result

print censor("this hack is wack hack", "hack")

但是,底部的打印功能仅输出'this hack is wack hack'

我在这里想念什么?

3 个答案:

答案 0 :(得分:0)

这里

[censored if i == word else i for i in words]

您创建了经过审查的单词列表,但没有对其进行任何引用。

也许您打算将此列表分配回words变量

words = [censored if i == word else i for i in words]

因为您继续使用该变量来生成返回值。

答案 1 :(得分:0)

从您的归来开始倒退。您返回结果。结果是''.join(words)。什么是单词?单词就是单词= text.split()。您基本上忽略了其他行。

def censor(text, word):
    return ' '.join(['*' * len(word) if x == word else x for x in text.split()])

print(censor("this hack is wack hack", "hack"))

答案 2 :(得分:0)

首先, return语句不在函数体内。

第二, 您需要将列表理解的结果存储到某个变量中。

以下代码将起作用:

def censor(text, word):
    words = text.split()
    result = ''
    censored = '*' * len(word)
    result=[censored if i == word else i for i in words]
    return ' '.join(result)

print(censor("this hack is wack hack", "hack"))
this **** is wack ****