我想知道你是否可以使用这样的映射:
x = ["a"]
y = ["b","c","d"]
map(x.append,y)
我想要x = [“a”,“b”,“c”,“d”],但这不会发生
map
返回一个迭代器,所以只要你不迭代就没有任何反应。你可以通过调用list
来实现这一点:
x = ["a"]
y = ["b","c","dx"]
list(map(x.extend,y))
# [None, None, None]
print(x)
# ['a', 'b', 'c', 'd', 'x']
请注意,由于extend
期望迭代(str对象是),它将在y
中的每个字符串上迭代并附加字符,因此您将在上面的示例中获得'd'
和'x'
。
你可能打算使用append
:
x = ["a"]
y = ["b","c","dx"]
list(map(x.append,y))
# [None, None, None]
print(x)
# ['a', 'b', 'c', 'dx']
但无论如何,map
意味着产生将函数应用于iterable项(这里是None
返回的x.append()
)的结果,并且将它用于函数的副作用使事情变得相当不清楚。
x = ["a"]
y = ["b","c","d"]
x.extend(y)
print (x)
输出:
['a', 'b', 'c', 'd']
extend()通过将列表的所有项(作为参数传递)添加到结尾来扩展列表。
extend()方法的语法是:
list1.extend(列表2)
这里,list2的元素被添加到list1的末尾。
如我所知,扩展函数将列表作为输入。使用map(),它会尝试获取一个元素,因为map会将一个iterable的元素逐个赋予一个函数,并再次将结果作为列表返回。
这应该做
x.extend(y)
这样做的原因是什么?
在可读性和执行速度方面,map
是最糟糕的选择。
x = ["a"]
y = ["b","c","d"]
x.extend(y)