Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在2D列表中搜索?_Python_List_Multidimensional Array - Fatal编程技术网

Python 在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: ")

我有一个2D列表,其中包含音乐信息列表,如下所示:

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 }