【问题标题】:Printing all elements of list if string is in list?如果字符串在列表中,打印列表的所有元素?
【发布时间】:2014-11-30 03:22:01
【问题描述】:

所以,我正在尝试创建一个搜索功能,如果搜索到的字符串存在于列表中,它将打印出 2D 列表中的所有实例。因此,如果用户搜索列表中的术语,程序将返回所有具有该术语的内部列表。这是我目前所拥有的:

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

但是,这给了我一个语法错误。我也不知道这是否正在做我想做的事情。如果有人知道我要做什么,我将不胜感激!

【问题讨论】:

  • 如果你调用这么多,你可能应该将曲目设置为集合而不是列表。
  • @user1277476 如果我们谈论专辑中的曲目,它们和列表中的元素一样是有序的,而集合中的元素是无序的

标签: python list for-loop multidimensional-array


【解决方案1】:

你已经接近了,我会稍微改变一下。

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

【讨论】:

  • 现在没有任何东西返回。我输入了一个搜索词,没有任何反应:(
  • 丢失while 循环,没有任何理由。您可以在每个函数调用中搜索一个单词,如果您愿意,可以将 music_library 放入一个循环中。
【解决方案2】:

我会这样写

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

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 2017-06-05
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多