如何在python 2.7中访问嵌套列表(或数组)的元素?

时间:2014-02-12 10:41:39

标签: python python-2.7 multidimensional-array

我知道以下两种方法:

代码:

mylist = [{'outer':[{'inner':[1,2,3]}, {'inner':[4,5,6,7]}]} ,
      {'outer':[{'inner':[11,22,33]}, {'inner':[44,55,66,77]}]}
     ]

上面的列表是我原始代码的示例,其中我以JSON格式转储信息并加载它。所以“mylist”是加载的json文件。

第一种方法

for c in mylist: 
    for d in c['outer']:
        for e in d['inner']:
             print e

第二种方法

for i in range(len(mylist)):
    for j in range(len(mylist[i]['outer'])):
        for k in range(len(mylist[i]['outer'][j]['inner'])):
            print mylist[i]['outer'][j]['inner'][k]

上述两种访问嵌套列表(或数组)元素的方法有何区别?

它们之间的技术差异是什么?

除上述方法外还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

使用nest list comprehensions

In [48]: print [e for c in mylist for d in c['outer'] for e in d['inner']]
[1, 2, 3, 4, 5, 6, 7, 11, 22, 33, 44, 55, 66, 77]

它应该更短,更快(通过一次打印整个东西)。

答案 1 :(得分:0)

您可以创建功能来展平输入列表,如下所示:

from collections import Iterable

def flatten(l):
    for element in l:
        if isinstance(element, Iterable) and not isinstance(element, basestring):
            if isinstance(element, dict):
                element = element.values()
            for i in flatten(element):
                yield i
        else:   
            yield element

使用您的输入:

In [3]: [ item for item in flatten(mylist) ]
Out[3]: [1, 2, 3, 4, 5, 6, 7, 11, 22, 33, 44, 55, 66, 77]

它甚至适用于更多嵌套列表,如:

mylist = [ {'outer':
                { 'inner':
                    { 'inner-1': 1, 'inner-1-1': 11},
                  'inner2':
                    [ set((1,2,3,4)), tuple((5,6,7,8)), [9,10,11] ],
            }}]

In [3]: [ item for item in flatten(mylist) ]
Out[3]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1, 11]