x=map(ord,l'a','3','2'1)
print(x)
y=list(map(ord,【a,3,2】))#用map 对象生成列表
print("生成的列表是:",y)
x1=next(x)#第一次迭代为什么值是49而不是97
map返回的是一个迭代器,a不是对应了97?next函数找下一个呗,98对应了十进制49。
不知道你这个问题是否已经解决, 如果还没有解决的话:1、关于python版本需要注意的
在python3.x版本里面,map()的返回值是iterators,而不是list, 所以想要使用,需将
iterator 转换成list ,而在python2.x版本里,map()是直接返回list关于python()函数中
常见的错误如下所示:我这里使用的是python3.x的版本
还是上面的代码,但是map()前面我删除了list
a=[3.7,4,5]
b=map(int,a)
print(b)
结果报错如下所示:<map object at 0x00000231F8C674E0>
2、当参数function没有返回值return时,直接返回成None或者没有任何返回值
(1)有pass语句
def sum(x):
pass
m=(1,2,3)
print(list(map(sum,m)))
输出结果:
[None, None, None]
Process finished with exit code 0
(2)没有pass、return语句,没有任何返回值
def sum(x):
m=(1,2,3)
print(list(map(sum,m)))
输出结果
Process finished with exit code 0
3、当处理两个并行的list时候,注意两个list的类型和数量相同
(1)类型不同
a=(1,2,3,"c")
b=(1,2,3,4)
m=list(map(lambda x,y:x*y,a,b))
print(m)
报错如下:提示其中有不是整型的
TypeError: can only concatenate str (not "int") to str
Process finished with exit code 1
改成同一类型
a=(1,2,3,4)
b=(1,2,3,4)
m=list(map(lambda x,y:x*y,a,b))
print(m)
正确结果如下所示:
[1, 4, 9, 16]
(2)数量不同时
不会报错,但是按照短的list去处理
例子一
a=(1,2,3,4)
b=(1,2,3)
m=list(map(lambda x,y:x*y,a,b))
print(m)
结果:
[1, 4, 9]
这样的话a里面的最后一个整数4就没有接受任何的处理
例子二
def add(x,y,z):
return x,y,z
a=(1,2,3,4)
b=(1,2,3)
c=(1,2,3,4,5)
m=list(map(add,a,b,c))
print(m)
结果
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
问题解答:
map函数是Python内置的高阶函数之一,接收一个函数f和一个可迭代对象,将可迭代对象中的每个元素逐一调用函数f处理,并返回一个包含处理结果的可迭代对象。以下是map函数的详细使用方法以及相关示例:
map函数的基本语法是:
map(function, iterable, ...)
其中,function表示要调用的函数,iterable表示可迭代对象,即需要处理的元素序列,可以是列表、元组、字符串等。
以下是一个基本的使用案例,定义一个函数,将一个数字列表中的每个元素平方:
def square(x):
return x * x
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
print(list(squared_numbers)) # 输出 [1, 4, 9, 16, 25]
由于map函数需要接收一个函数作为参数,如果只是为了简单地对列表中的每个元素做一个操作,可以使用lambda表达式来定义匿名函数。
以下是一个使用lambda表达式的案例:
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x * x, numbers)
print(list(squared_numbers)) # 输出 [1, 4, 9, 16, 25]
当map函数有多个可迭代对象作为参数时,函数需要接收多个参数并返回相应的结果。
以下是一个使用两个列表作为参数的案例,返回两个列表元素相加的结果:
numbers1 = [1, 2, 3, 4, 5]
numbers2 = [10, 20, 30, 40, 50]
result = map(lambda x, y: x + y, numbers1, numbers2)
print(list(result)) # 输出 [11, 22, 33, 44, 55]
map函数在Python3中返回的是迭代器类型。因为迭代器具有惰性计算的特性,所以需要注意在使用时不要多次调用,否则会导致结果不对。
以下是一个关于迭代器用法的案例:
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x * x, numbers)
print(squared_numbers) # 输出 <map object at 0x7fa10e11fa90>
for n in squared_numbers:
print(n) # 输出 1 4 9 16 25
print(list(squared_numbers)) # 输出 []
可以看到,第一次使用迭代器时,结果可以正常输出。但是在第二次使用迭代器时,结果为空,这是因为迭代器已经指向了最后一个元素。
此时,需要将迭代器转为列表或者其他可迭代对象:
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x * x, numbers)
print(list(squared_numbers)) # 输出 [1, 4, 9, 16, 25]
squared_numbers = map(lambda x: x * x, numbers)
for n in squared_numbers:
print(n) # 输出 1 4 9 16 25
squared_numbers = list(map(lambda x: x * x, numbers))
print(squared_numbers) # 输出 [1, 4, 9, 16, 25]
请编写一个函数,将一个包含若干英文名字的列表变成一个包含规范英文名字的列表,规范英文名字定义为首字母大写,其余字母小写。
以下是一个实现该函数的参考代码:
def format_name(name):
return name.capitalize()
names = ['adam', 'LISA', 'barT']
formatted_names = map(format_name, names)
print(list(formatted_names)) # 输出 ['Adam', 'Lisa', 'Bart']
参考资料: - Python 内置高阶函数之 map