这次需要对一个列表中的所有元素加上同一个字符串(如[‘1’, ‘2’, ‘3’, …] --> [‘s1’, ‘s2’, ‘s3’, …]),用for循环可以实现,但是感觉不那么优雅,猜想python肯定有更高效的方法实现这个操作。探索发现,虽然没有直接的函数或者语法实现,但可以通过map()函数间接实现,效率上也高了很多。
在这之前很少使用map函数。
map()函数是python的内置函数
语法: map(function, iterable, …)
参数: function – 函数;iterable – 序列
返回: 迭代器。返回结果是个map对象,可使用list()转为列表类型,但需要注意转为列表后生成的列表是新列表(不改变原列表),需要赋值给一个新的列表变量!
语法参考:https://www.runoob.com/python/python-func-map.html
test_list = ['1', '2', '3']
def y(x): # 函数中可以对x进行任意操作,然后返回一个值
return 's' + x
list2 = list(map(y, test_list))
print(list2)
# 输出结果为:['s1', 's2', 's3']
'''
# 用for循环实现如下:
test_list = ['1', '2', '3']
list3 = []
for i in test_list:
list3.append('s' + i)
print(list3)
'''
函数中可以对x
进行任意操作,然后返回一个值。但是map(y, test_list)
中的y
并不能给函数传递参数(个人猜想),如定义函数def y(x, str):
,但不能使用map(y(str), test_list)
。因此寻找了另外两个办法,实现传递多参数的效果。详看下文。
更多基本用法示例可参考:
https://blog.csdn.net/quanlingtu1272/article/details/95482253
lambda表达式也被称为匿名函数,和普通的函数完全一样,但是没有def 定义的函数名,适合用于程序中仅使用一次的情况。
下面的示例相当于把变量b
和a
传递进lambda函数中了。
test_list = ['1', '2', '3']
a = 'v'
b = 's'
list2 = list(map(lambda x: a + b, test_list))
print(list2)
# 输出结果为:['vs1', 'vs2', 'vs3']
lambda表达式可参考:https://blog.csdn.net/answer3lin/article/details/86352009
map()+lambda参考:https://blog.csdn.net/qq_44214671/article/details/110144525
创造一个等长的list并填充相同的元素,将他们对应位置的元素相加。
test_list = ['1', '2', '3']
def y(a, b, c):
return a + b + c
a = ['v'] * len(test_list)
b = ['s'] * len(test_list)
list2 = list(map(y, a, b, test_list))
print(list2)
# 输出结果为:['vs1', 'vs2', 'vs3']
两个等长list的各对应位置元素相加可参考:
https://blog.csdn.net/weixin_42782150/article/details/124746314
创建list并填充相同的元素可参考:
https://blog.csdn.net/sunxmwebstudy/article/details/111414278
如果列表长度不相等,运行结果会怎样?参考(其中的“示例代码4”):
https://blog.csdn.net/weixin_44799217/article/details/119799110
相对for循环 为什么要用map函数
当然map效率更高啦,如果有人做了实验,可以评论区分享一下效率对比结果
在“基本示例”中,函数y
不能传递参数,就不能定义一个全局变量吗?当然可以!但是在有些情况下不太方便。
就学了这么多,若有不当之处,可以指出,感激万分