Python 在2D列表中搜索?
我有一个2D列表,其中包含音乐信息列表,如下所示:Python 在2D列表中搜索?,python,list,multidimensional-array,Python,List,Multidimensional Array,我有一个2D列表,其中包含音乐信息列表,如下所示: tracks = [(The Beatles, Yellow Submarine), (Green Day, American Idiot)] 我正在尝试创建一个函数,该函数将要求用户输入一个字符串,然后该函数将查看列表并显示所有内部列表,其中包含字符串。这是我当前的功能,不起作用 if response == "st": st_search = raw_input("Search tracks: ")
tracks = [(The Beatles, Yellow Submarine), (Green Day, American Idiot)]
我正在尝试创建一个函数,该函数将要求用户输入一个字符串,然后该函数将查看列表并显示所有内部列表,其中包含字符串。这是我当前的功能,不起作用
if response == "st":
st_search = raw_input("Search tracks: ")
return [ t for t in tracks if st_search in tracks ]
elif response == "sa":
sa_search = raw_input("Search artists: ")
return [ ar for ar in tracks if s_search in tracks ]
如果有人明白我在做什么,并能提供帮助,我将不胜感激
编辑:2D音乐列表比给出的示例要大得多除了您的第一个代码段具有无效语法外,您的搜索功能在大部分情况下都可以完成。在生成器中,您应该检查当前条目是否匹配,而不是整个列表:
if response == "st":
st_search = raw_input("Search tracks: ")
return [ t for t in tracks if st_search==t[1] ]
elif response == "sa":
sa_search = raw_input("Search artists: ")
return [ t for t in tracks if sa_search==t[0] ]
这将从列表中返回与查询匹配的所有(艺术家、曲目)对。理想情况下,您不希望将变量硬编码到变量中。这样,更改数据结构可能会变得非常困难。您可以考虑以下代码:
ind = { 'sa': 0,
'st': 1 }
st_search = raw_input("Search tracks: ")
return filter( lambda m: m[ind[response]] == st_search , tracks )
这里,如果数据结构从
tracks = [('The Beatles', 'Yellow Submarine'),
('Green Day', 'American Idiot')]
到
您只需通过以下方式在ind
ex变量中进行更改:
ind = { 'sa': 0,
'st': 1,
'al': 2 }
现在你也可以按相册查看。当然,您必须检查响应是否在ind
中,但这只是一个附加的if
语句
ind = { 'sa': 0,
'st': 1,
'al': 2 }