python map()函数 实现对列表中每个元素做相同的处理 (传递多个参数)(高效率运行)

这次需要对一个列表中的所有元素加上同一个字符串(如[‘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表达式(推荐)

lambda表达式也被称为匿名函数,和普通的函数完全一样,但是没有def 定义的函数名,适合用于程序中仅使用一次的情况。
下面的示例相当于把变量ba传递进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

创造一个等长的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不能传递参数,就不能定义一个全局变量吗?当然可以!但是在有些情况下不太方便。

就学了这么多,若有不当之处,可以指出,感激万分

你可能感兴趣的:(Python,python)