2011-07-12 59 views
1

列表中是否有任何等效的'LIKE'函數(如MySQL中的函數)。例如;列表中的'LIKE'函數

這是我的名單:

 
abc = ['one', 'two', 'three', 'twenty one'] 

如果我給這個詞"on",它應打印從列表中匹配的單詞(在這種情況下:'one''twenty one'),如果我給"fo",它應該打印False

回答

10

您可以使用列表理解:

[m for m in abc if 'on' in m] 

這大致翻譯爲「在ABC的每個元素,添加元素的列表,如果該元素包含‘上’子串」

+3

如果找不到任何內容,這也會返回一個空列表 - 空列表是錯誤的。 – cwallenpoole

+1

@cwallenpoole:停止分裂......其餘的由OP決定...... –

+5

@Blackmoon我覺得空列表評論很重要,因爲它確實解決了一個問題。我沒有試圖分開頭髮。 – cwallenpoole

-1
for x in abc: 
    if "on" in x: 
     print x 

,或作爲功能,

def like(str, search): 
    res = [] 
    for x in search: 
     if str in x: 
      res.append(x) 
    return res 
+0

列表內涵是去 –

+1

另一-1功能的解決方案 –

+0

列表理解肯定是更Python和'str'隱藏的構建方式在'str'類中。 – Johnsyweb

3
>>> abc = ['one', 'two', 'three', 'twenty one'] 
>>> print [word for word in abc if 'on' in word] 
['one', 'twenty one'] 
3

是將這些list comprehensions夠用了嗎?

>>> abc = ['one', 'two', 'three', 'twenty one'] 
>>> [i for i in abc if 'on' in i] 
['one', 'twenty one'] 
>>> [i for i in abc if 'fo' in i] 
[] 

你可以在一個函數把這個包:

>>> def like(l, word): 
...  words = [i for i in abc if word in i] 
...  if words: 
...   print '\n'.join(words) 
...  else: 
...   print False 
... 
>>> like(abc, 'on') 
one 
twenty one 
>>> like(abc, 'fo') 
False 
>>>