【问题标题】:How do I break down this list comprehension in Python?如何在 Python 中分解这个列表理解?
【发布时间】:2017-02-13 05:40:07
【问题描述】:

我之前看到过一个关于如何从字符串列表中找到特定单词的字符的问题。我想它被删除了,因为我再也找不到它了。

例如:

>>>findTheLetters(["hello", "world"], "hold")
>>>True
>>>findTheLetters(["hello", "world"], "holn")
>>>False (because of no "n")

所以我在这里看到有人说要像这样使用列表理解:

return all((any(letter in word for word in myList)) for letter in myString)

我的问题是,我将如何分解该列表理解以便理解它是如何工作的?我使用了简单(新手)列表理解,但没有类似的。

我的尝试:

def findTheLetters(myList, myString):
    for word in myList:
        for letter in word:
            #something goes here?
        return letter in myString

这是我到过的最远的地方。它有时像“lord”和“hold”一样工作,但就像我尝试“hell”或“woe”一样,即使字符“h”“e”“l”“l”和“ w" "o" "e" 在单词列表中。我不确定我需要添加什么才能使它像理解一样工作。

【问题讨论】:

标签: python string list python-3.x list-comprehension


【解决方案1】:

这里有一个教育性的小例子,向您展示该算法在幕后做了什么:

def findTheLetters(myList, myString):
    return all((any(letter in word for word in myList)) for letter in myString)


def findTheLetters1(myList, myString):
    res1 = []
    for letter in myString:
        res2 = []
        for word in myList:
            res2.append(letter in word)

        print(letter, res2, any(res2))

        res1.append(any(res2))

    print('-' * 80)
    print(res1, all(res1))
    print('-' * 80)
    return all(res1)

findTheLetters1(["hello", "world"], "hold")
findTheLetters1(["hello", "world"], "holn")

输出:

h [True, False] True
o [True, True] True
l [True, True] True
d [False, True] True
--------------------------------------------------------------------------------
[True, True, True, True] True
--------------------------------------------------------------------------------
h [True, False] True
o [True, True] True
l [True, True] True
n [False, False] False
--------------------------------------------------------------------------------
[True, True, True, False] False
--------------------------------------------------------------------------------

我建议您学习并阅读有关任何/所有运算符以及嵌套理解列表的知识,以了解执行顺序。

希望对你有帮助

【讨论】:

  • 相信这样更有意义。所以理解是使用表达式(单词中的字母)然后for循环(myList中的单词)都在for循环中(mystring中的字母)对吗?我肯定会阅读嵌套理解列表。我只是对解构时列表理解本身的工作方式感到困惑。谢谢你。 :)
  • @BPL 如果我可能会问, res1 = [] 和 res2 = [] 做什么?它们是用于检查字符的占位符吗?
  • @Wiggs 他们是lists,打开一个交互式会话并尝试res1 = [],然后只需type(res1)res1.__class__。无论如何,我建议您通过 python 教程来熟悉 python 基本块;-)
  • 哦,好的,再次感谢您的示例和细分,它真的很有帮助。
猜你喜欢
  • 2022-06-16
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多