2011-06-21 53 views
2

的名单上有列出的清单,说:处理列表

arr = [[1, 2], [1, 3], [1, 4]] 

我想追加100到每个内部列表。对于上面的例子输出为:

arr = [[1, 2, 100], [1, 3, 100], [1, 4, 100]] 

我当然可以这样做:

for elem in arr: 
     elem.append(100) 

但有一些更Python可以做?为什么下面不起作用:

arr = [elem.append(100) for elem in arr] 

回答

3

注意,你的代码也可以运行 - 你必须知道的唯一的事情是,有没有必要在这样的情况下,结果赋给变量:

arr = [[1, 2], [1, 3], [1, 4]] 
[x.append(100) for x in arr] 

后执行改编将包含更新列表[ 1,2,100],[1,3,100],[1,4,100]],例如,它就像就地更新一样工作,但这不是很常见的做法。

同样的结果,你会在接下来的情况下得到:

map(lambda x: x.append(100), arr) 

正如讨论,您可以使用列表理解或地图的任何变量分配结果要做到这一点:

res = map(lambda x: x + [100], arr) 
+0

啊......谢谢你建议修改我的代码。 –

+0

前两个不是惯用的,第二个甚至不能在Python 3中工作。 – delnan

+0

对不起,如果是这样,但我通知OP关于前两种情况。第三个没有在python 3中测试过,因为我从来没有用过它。谢谢你通知我这件事。 –

5

第二个版本应该写成像arr = [elem + [100] for elem in arr]。但是,如果你问我是第一次,那么最pythonic的方式。 for构造有它自己的用途,在这里很适合。

+1

它也会创建列表的副本... –

1

你可以做

[a + [100] for a in arr] 

之所以你append不起作用的是,append不返回列表,而是None

当然,这比仅仅做append需要更多的资源 - 你最终会复制一切。

+0

感谢您指出为什么我的示例中的附录不起作用。 –

1

这是更pythonic的方式

for elem in arr: 
    elem.append(100) 

但作为一个选项,你也可以试试这个:

[arr[i].append(100) for i in range(len(arr))] 
print arr # It will return [[1, 2, 100], [1, 3, 100], [1, 4, 100]]