假设我有以下包含其他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
答案 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