2016-04-14 84 views
2

我有一个元素列表。每个元素都是一个列表。例如如何访问嵌套列表中的元素

a=[[1,2,3,[1,2,3,4]], [4,5,6,[2,5]], [7,8,9,[3,3,4]]...]] 

我该如何去了解外表中每个元素的第二个元素,即[2,5,...]?

a [:,2]会很好(它可能有其他可能的解释),但看起来我做这件事的唯一方法是使用for循环的一些描述。如果是后者,对我来说,我会更好地用每个元素的命名数组重写我的代码。然后我会问 - 列表何时会有用?

如果我使用圆括号并用元组替换了术语列表,那么我可以同样问相同的问题,然后引导我问为什么要打扰差异?一个元组给了我什么,我不能用一个列表实现?

回答

0

如果你想避免环路您可以使用itemgettermap提取列表:

import operator 

a = [[1,2,3,[1,2,3,4]], [4,5,6,[2,5]], [7,8,9,[3,3,4]]] 
print map(operator.itemgetter(1), a) # [2, 5, 8] 

根据您的列表保存什么数据,你可能会更好创建类和使用对象来代替。通过使用列表,您可以使用列表操作,并允许将子列表用作序列和迭代列表,这些列表可能会有所帮助,具体取决于您想要对数据执行的操作。自定义类和magic methods可以实现同样的功能,但需要更多的工作。

使用元组将允许您在sets和dict中使用它们,因为它们是不可变的。有other questions关于差异的详细答案。

+0

数据基本上如所示 - 外部列表的每个元素都是一个数字列表和一个可变长度的数组数组。每个元素表示特定解决方案的各种数量。找到所有解决方案后,我想选择满足特定属性的解决方案。一个类是好的,但我有一个列表/数组的对象,我仍然会有同样的问题 – user3799584

+0

我正在考虑将内部列表转换为对象,如果它们都具有相同的长度和每个索引中的数字/列表有一个具体含义代码可能更易读,如果使用对象代替。您仍然可以使用map或列表理解来从元素中生成列表,而不管它们是对象还是列表。 – niemmi

0

你有没有试过?

>>> a=[[1, 2, 3, [1, 2, 3, 4]], [4, 5, 6, [2, 5]], [7, 8, 9, [3, 3, 4]]] 
>>> [ i[1] for i in a] 
[2, 5, 8] 
+0

否则称为for循环!我可以看到没有理由不允许[:,1]作为有效的构造。它肯定比整个代码中的一堆for循环更具可读性。或者“列表理解”,如果你愿意的话。 – user3799584

+0

向语言设计者投诉或撰写您自己的语言。 –

+0

正如我的问题所问 - 我可以做到没有for循环。由于答案显然不是,最好重写代码并用自己的名字而不是单个列表分隔所有变量。 – user3799584