我如何在Python中细分这个列表理解?

时间:2016-10-04 22:29:50

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

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

例如:

>>>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"并且"举行",但就像我尝试" hell"或者"悲伤"例如,即使字符" h" " E" " L" " L"和" w" " O" " E"在单词列表中。我不确定我需要添加什么来让它像理解一样工作。

1 个答案:

答案 0 :(得分:2)

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

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
--------------------------------------------------------------------------------

我建议你学习&阅读关于任何/所有操作符以及嵌套理解列表以了解执行顺序。

希望有所帮助