【问题标题】:indexing for python list of listspython列表的索引
【发布时间】:2017-10-04 06:38:15
【问题描述】:

我想使用一组索引来“寻址”列表列表。下面我提供了一些我正在寻找的行为的例子(听说是用语言表达,请看例子清楚)

假设我的列表是

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

我曾尝试编写一个函数,但最终使用了大量条件语句来检查索引是否指向子列表或嵌套列表的“叶子”处的值之一。

【问题讨论】:

  • 是的,我很有经验,对 python 的了解不多。我有这样做的功能,但它不适用于任何大小的嵌套列表,我觉得有一个非常简短和甜蜜的解决方案。
  • 我不完全同意这个问题是重复的。首先,引用的问题是针对字典的。此外,当列出的索引到达列表中的“叶子”时,函数应该返回它找到的值,而不是长度。否则返回长度。我在 cmets 中有这个,但应该更清楚
  • 编辑您的问题并添加所有相关信息,包括您解决此问题的尝试。就目前而言,您的问题很接近(太宽泛/不清楚)。
  • 仅供参考,昨天有人问过这个问题,得到了很好的回应。我现在找不到它......我应该评论一下,所以它会在我的历史中。 :-(
  • @downshift: 不,我看到的那个专门处理任意数量的索引,以列表的形式呈现,用于从嵌套列表中提取。

标签: python list indexing


【解决方案1】:

这是一个简单的函数来做你想做的事:

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)
这些调用都返回您在上面发布的预期值。

【讨论】:

  • 完美,您还可以将列表作为第二个参数传递,这很酷。
猜你喜欢
  • 1970-01-01
  • 2019-07-05
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
相关资源
最近更新 更多