我想使用一组索引“寻址”列表列表。下面我提供一些我正在寻找的行为的例子(听到用语言表达清楚,请看清楚的例子)
假设我的列表列表是
lol = [[[0,1,2],[-1,2,4,5]],[[-2,-1,-3]],[[4,6,1],[1,7,-1],[-2,-4,1]]]
# print the length of some of the sublists
print len(lol) # prints 3
print len(lol[0]) #prints 2
print len(lol[0][1]) #prints 4
# print the value of some of the "leaves"
print lol[0][1][2] #prints 4
print lol[1][0][2] #prints -3
问题:我正在寻找一个函数,它接受上面例子中的索引,并返回它在那些索引处找到的子列表的长度或它在那些索引处找到的值;例如,
address = [1,0,2]
print someFunction(lol,address) # prints -3
address = [0,1]
print someFunction(lol,address) # prints 4
我试过编写一个函数,但最后得到了很多条件语句来检查索引是指向子列表还是嵌套列表“叶子”中的一个值。
答案 0 :(得分:0)
这是一个简单的功能,可以做你想要的:
def get_length_or_value(l, *i):
item = l
for index in i:
item = item[index]
return len(item) if isinstance(item, list) else item
此函数首先在给定索引处找到元素(如果有),然后根据元素是否为list
类型返回适当的值。
您可以这样称呼它:
get_length_or_value(lol)
get_length_or_value(lol, 0)
get_length_or_value(lol, 0, 1)
get_length_or_value(lol, 0, 1, 2)
get_length_or_value(lol, 1, 0, 2)
这些调用都会返回您在上面发布的预期值。