我想优雅地做到以下几点。我有一个清单:
list1 = [[1,2],[3,1,4,7],[5],[7,8]]
我想将数字1附加到列表的每个元素,以便我有
list1 = [[1,2,1],[3,1,4,7,1],[5,1],[7,8,1]]
我正试图通过
来映射map(list.append([1]), vectors)
但是这会返回错误append() takes exactly one argument (0 given)
,如果我只是尝试append([1])
(没有list.
),我会得到NameError: global name 'append' is not defined
。我想我可以用循环来做,但这看起来更优雅,有没有办法正确映射?
答案 0 :(得分:1)
以下是实现所需内容的几种方法:
更具可读性和经典方式
for el in list1:
el.append(1)
列表理解
list1 = [el + [1] for el in list1]
发生器:
list1 = (el + [1] for el in list1)
地图
list1 = map(lambda el: el + [1], list1)
用什么?
这取决于您自己的情况,可能取决于执行速度优化,代码可读性,使用地点。
Map
是可读性和执行速度最差的选择For
是一种最快速,更简单的方法Generators
只允许您在真正需要时生成新列表List comprehension
- 经典for
的一个内线,当您需要使用if
即。如果您只需要为每个项添加元素 - for
循环是执行此操作的最佳选择,但如果您需要仅在item
>时添加item
40,那么你可以考虑使用List comprehension
。
例如:
经典For
x = 41
for el in list1:
if x > 40:
el.append(x)
列表理解
x = 1
list1 = [el + [x] for el in list1 if x > 40]
正如@jmd_dk所提到的,在此示例中有一个基本区别:使用简单for
,您只需附加到列表的现有对象,这对执行时间和内存使用情况。当您使用List comprehension
时,您将获得新列表对象,在这种情况下,每个项目都会有新的列表对象。
答案 1 :(得分:0)
尝试列表理解,利用添加列表将它们连接在一起的事实。
new_list = [l + [1] for l in list1]
答案 2 :(得分:0)
你可以简单地做
list1 = [[1,2],[3,1,4,7],[5],[7,8]]
for el in list1:
el.append(1)
答案 3 :(得分:0)
map(lambda x: x + [1], list1)
你的意思是?
list.append()没有返回(表示总是返回None)
答案 4 :(得分:0)
使用列表理解和append
,您可以执行以下操作:
list1 = [[1, 2], [3, 1, 4, 7], [5], [7, 8]]
[item.append(1) for item in list1]
print(list1) # Output: [[1, 2, 1], [3, 1, 4, 7, 1], [5, 1], [7, 8, 1]]
<强>输出:强>
>>> list1 = [[1, 2], [3, 1, 4, 7], [5], [7, 8]]
>>> [item.append(1) for item in list1]
[None, None, None, None]
>>> list1
[[1, 2, 1], [3, 1, 4, 7, 1], [5, 1], [7, 8, 1]]
您也可以像这样使用extend
:
[item.extend([1]) for item in list1]
print(list1) # Output: [[1, 2, 1], [3, 1, 4, 7, 1], [5, 1], [7, 8, 1]]