嵌套列表迭代

时间:2015-05-07 07:18:01

标签: python list python-2.7

我在Python中有一些列表,其中嵌套列表名为otherElem,如下所示:

otherElem=[[list1],[list2],...[list_n]]

我需要的是创建一个新列表,它将执行一些操作(j.Mirror是无关紧要的,可以是任何东西)并创建一个新列表,它将维护以前列表的顺序和格式。我试过这个,但没有成功。我在编程方面是全新的,对不起打字错误(如果有的话)

for i in otherElem:
        for j in i:
            j=j.Mirror(mirPlane)
            newList.Add(j)
        newList2.Add(newList)

4 个答案:

答案 0 :(得分:1)

可以使用嵌套列表理解来完成,就像这样。

otherElem=[[1, 2, 3, 4],[5, 6, 7, 8], [9, 10, 11, 12]]

l = [[an_elem * 2 for an_elem in inner_list] for inner_list in otherElem]

print l

结果是,

[[2, 4, 6, 8], [10, 12, 14, 16], [18, 20, 22, 24]]

在这里,每个元素的操作乘以2.在你的情况下j.Mirror(mirPlane),我不知道它返回的是什么。

答案 1 :(得分:1)

其他答案是正确的;列表理解可能是在Python中执行此操作的最佳方法。同时,它特别看起来你所列出的解决方案的错误在于它每次查看内部列表时都需要创建一个新列表。它应该看起来像:

new_list_of_lists = [] 
for old_list in old_list_of_lists:
   new_list = []
   new_list_of_lists.append(new_list)
   for old_item in old_list:
      new_item = transformation(old_item) 
      new_list.append(new_item)

这七行完全等同于更短的嵌套列表推导,所以你可以看出为什么这些理解更可取!

答案 2 :(得分:1)

您可以使用operator来调用一个漂亮的嵌套调用。

import operator

upper = operator.methodcaller('upper')
list =[['a', 'b', 'c', 'd'],['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l']]
print [map(upper, sub_list) for sub_list in list]
# [['A', 'B', 'C', 'D'], ['E', 'F', 'G', 'H'], ['I', 'J', 'K', 'L']]

答案 3 :(得分:0)

内部循环可以很容易地写成列表理解:

[ j.Mirror(mirPlane) for j in i ]

外环也是如此:

[ <inner part here> for i in otherElem ]

将它们放在一起,我们得到一个嵌套列表理解:

newList2 = [
  [ j.Mirror(mirPlane) for j in i ]
  for i in otherElem
]