在列表python中搜索列表

时间:2018-06-15 04:36:37

标签: python arraylist computer-science

假设我有以下包含其他small_lists的main_list:

main_list = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

我想找到small_list知道small_lists的索引0和1。例如,如何创建一个getlist()函数:

getlist(4,5) = [4, 5, 6, 7]
getlist(0,1) = [0, 1, 2, 3]
getlist(5,5) = None
getlist(9,10) = None

4 个答案:

答案 0 :(得分:2)

最简单的方法是将列表映射到字典,其中键设置为您要检索的内容。这可以使用列表理解快速完成,如下例所示。

>>> main_list = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

>>> indexed_list = { (i[0], i[1]) : i for i in main_list }

>>> indexed_list.get( (0,1) )
[0, 1, 2, 3]

>>> indexed_list.get( (4,5) )
[4, 5, 6, 7]

>>> indexed_list.get( (5,5) )
None

答案 1 :(得分:0)

这是对元素进行分类的一种奇怪方式。有更合适的方式来存储您的数据虱子词典。

main_list = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
def getlist(a,b):
    for sub_list in main_list:
        if [a,b] == sub_list[0:2]:
            return sub_list

>>> print (getlist(4,5))
>>> print (getlist(2,1))
[4, 5, 6, 7]
None

答案 2 :(得分:0)

检查切片列表可以在这里工作,如果有多个匹配列表的起始索引类似于参数,这也有效。

>>> main_list = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
>>> def get_list(tup, list_group):
...     return [list_ for list_ in list_group if list_[:2] == list(tup)]
...
>>> print(get_list((0, 1), main_list))
[[0, 1, 2, 3]]
>>> main_list = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [0, 1, 10, 7]]  # multiple occurence
>>> print(get_list((0, 1), main_list))
[[0, 1, 2, 3], [0, 1, 10, 7]]

答案 3 :(得分:0)

以下代码可以解决您的问题,或至少让您走上正轨。如果需要,还可以here on OnlineGDB进行进一步的修补。

main_list = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

def getlist(idx0, idx1):
    # Assumes there isn't a match, unless one is found
    target_list = None

    # Loops through the list of lists, checking for a match with the characters at index 0 and 1
    for sub_list in main_list:
        if idx0 == sub_list[0] and idx1 == sub_list[1]:
            target_list = sub_list

    # returns the target list (if it found) or None (if it isn't)
    return target_list

print(getlist(4,5))
>>[4, 5, 6, 7]
print(getlist(0,1))
>>[0, 1, 2, 3]
print(getlist(5,5))
>>None
print(getlist(9,10))
>>None