2016-10-04 26 views
0

我之前看到过一个关于如何从字符串列表中查找特定单词的问题。它被删除,我想因为我找不到它了。如何在Python中分解这个列表理解?

因此,例如:

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

这是我已经得到最远。它有时像“主”和“持有”一样工作,但就像我尝试“地狱”或“祸”一样,即使字符“h”“e”“l”“l”和“ w“”o“”e“在单词列表中。我不确定我需要添加什么来使其像理解那样工作。

+0

大概可以使用这个答案,除非你关心的字母数,http://stackoverflow.com/questions/9443302/search-strings-in-list-containing-specific-letters-随机顺序 –

回答

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

我建议你学习&阅读任何/所有运算符以及嵌套的理解列表来了解执行顺序。

希望它可以帮助

+0

这相信会让你更有意义。所以理解是在for循环(mystring中的字母)中使用表达式(单词中的字母),然后是for循环(myList中的单词)?我当然会在嵌套的理解列表上进行阅读。我只是困惑于列表理解本身在解构时如何工作。谢谢。 :) – Wiggs

+0

@BPL如果我可能会问,res1 = []和res2 = []做什么?他们是占位符来检查角色吗? – Wiggs

+0

@Wiggs他们是[列表](https://docs.python.org/2/tutorial/datastructures.html#more-on-lists),打开交互式会话并尝试'res1 = []',然后只是'键入(res1)'或'res1 .__ class__'。无论如何,我建议你通过python教程来熟悉python的基本块;-) – BPL