2014-10-05 2 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

+0

@ user1277476 Если мы говорим о треках в альбоме, они упорядочены, а также элементы в списке, а элементы в наборе неупорядочены – gboffi

ответ

0

Вы близко, я бы немного изменил это следующим образом.

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

Ничто не возвращается сейчас. Я ввожу поисковый запрос, и ничего не происходит :( – Quadufu

+0

Потеряйте цикл while, нет причин для этого. Вы можете искать одно слово для вызова функции, вы можете поместить 'music_library' в цикл, если хотите. – CoryKramer

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]: 
Смежные вопросы