2014-10-05 84 views
0

所以,我试图创建一个搜索函数,如果搜索的字符串出现在列表中,它将打印出2D列表中的所有实例。因此,如果用户搜索列表中的术语,程序将返回所有具有该术语的内部列表。这是我到目前为止有:如果字符串在列表中,打印列表的所有元素?

def music_library(tracks): 
while True: 
    st_search = raw_input("Search tracks: ") 
    for a in tracks if st_search == tracks: 
     print a 

然而,这是给我一个语法错误。我也不知道这是否正在做我想做的事情。如果有人知道我想要做什么,我会很感激帮助!

+0

如果你调用这么多,你可能应该制作曲目而不是列表。 – user1277476 2014-10-05 20:52:05

+0

@ user1277476如果我们正在谈论专辑中的曲目,它们将按照列表中的元素进行排序,而集合中的元素是无序的 – gboffi 2014-10-05 21:10:50

回答

0

你很近,我会稍微改变一下,如下所示。

def music_library(tracks): 
    st_search = raw_input("Search tracks: ") 
    for a in tracks: 
     if st_search == a: 
      print a 
+0

现在没有东西正在返回。我输入一个搜索词并没有任何反应:( – Quadufu 2014-10-05 20:29:31

+0

失去'while'循环,没有理由,你可以为每个函数调用搜索一个词,如果你愿意,可以将'music_library'放入循环中。 – CoryKramer 2014-10-05 20:30:19

0

我会写这样

def find_track(albums, track): 
    return [album for album in albums if track in album] 

我有它在解释测试,看它是否是你想要的

In [3]: albums = [['as','def','ded'], ['red','def','pil'],['ret','tre','yui']] 

In [4]: def find_track(albums,track): 
    ...:  return [album for album in albums if track in album] 
    ...: 

In [5]: find_track(albums,'def') 
Out[5]: [['as', 'def', 'ded'], ['red', 'def', 'pil']] 

In [6]: find_track(albums,raw_input('Track? ')) 
Track? ded 
Out[6]: [['as', 'def', 'ded']] 

In [7]: