使用 map() 函数进行迭代
iteration with map() function
我正在尝试使用 map() 函数并将列表中的所有单词大写。
my_pets = ['sisi', 'bibi', 'titi', 'carla']
def capitalizing(a):
for item in a:
b = item.upper()
return b
print(list(map(capitalizing, my_pets)))
如果我运行这段代码,我得到如下输出:
['S', 'B', 'T', 'C']
这是为什么?为什么代码只是 运行 第一个字母并在每个单词处停止?
我已经知道“for” loop/iteration 获取所有单词是不正确的,我不需要它,但是为什么这个循环 运行s 每个单词的第一个字母单词?
提前感谢您的帮助。
return
return 值和 退出函数 。通常你会想要使用 到 return 多个值,但你实际上根本不需要循环:
def capitalizing(a):
return a.upper()
事实上,您甚至不需要 capitalizing
,因为它只是 str.upper
:
的包装器
>>> print(list(map(str.upper, my_pets)))
['SISI', 'BIBI', 'TITI', 'CARLA']
或者更好的是,改用列表理解:
>>> print([s.upper() for s in my_pets])
['SISI', 'BIBI', 'TITI', 'CARLA']
map
的作用是为您处理输入序列的迭代位,因此您提供给 map
的函数应该这样定义它只接受序列中的一个元素作为参数的方式。
按照 OP 中提供的方式,map
获取原始列表的每个元素(即名称)并依次将 capitalizing
应用于每个元素。但是,该函数在内部循环其参数(在本例中,参数是名称字符串中的字符)并且 return 是每个名称中第一个字符的大写字母。 (你能看出原因吗?)
正如其他人所建议的那样,有 simpler/cleaner 种方法可以实现这一点,但如果您想了解 map
的工作原理,请删除 for
循环并简单地 return a.upper()
.
更容易理解地图,
print(list(map(lambda s: s.upper(), ['sisi', 'bibi', 'titi', 'carla'])))
您将 return 放置在 for 循环内,导致它在第一次迭代后变为 return(在传递给大写的字符串的第一个字符上)。例如:
capitalizing('sisi')
for item in a: # a = 'sisi'
b = item.upper() # item = 's', b = 'S'
return b # b = 'S', return 'S' and exit function
代码可以写得更简洁一些,其他答案已经显示了。这段代码做事是多余的。
这是您的代码的固定版本,在 for 循环完成构建字符串之后 return,而不是在第一次迭代之后:
my_pets = ['sisi', 'bibi', 'titi', 'carla']
def capitalizing(a):
b = ""
for item in a:
b += item.upper()
# using return here will exit the function immediately after the first iteration
return b # return after finishing
print(list(map(capitalizing, my_pets)))
我正在尝试使用 map() 函数并将列表中的所有单词大写。
my_pets = ['sisi', 'bibi', 'titi', 'carla']
def capitalizing(a):
for item in a:
b = item.upper()
return b
print(list(map(capitalizing, my_pets)))
如果我运行这段代码,我得到如下输出:
['S', 'B', 'T', 'C']
这是为什么?为什么代码只是 运行 第一个字母并在每个单词处停止?
我已经知道“for” loop/iteration 获取所有单词是不正确的,我不需要它,但是为什么这个循环 运行s 每个单词的第一个字母单词?
提前感谢您的帮助。
return
return 值和 退出函数 。通常你会想要使用
def capitalizing(a):
return a.upper()
事实上,您甚至不需要 capitalizing
,因为它只是 str.upper
:
>>> print(list(map(str.upper, my_pets)))
['SISI', 'BIBI', 'TITI', 'CARLA']
或者更好的是,改用列表理解:
>>> print([s.upper() for s in my_pets])
['SISI', 'BIBI', 'TITI', 'CARLA']
map
的作用是为您处理输入序列的迭代位,因此您提供给 map
的函数应该这样定义它只接受序列中的一个元素作为参数的方式。
按照 OP 中提供的方式,map
获取原始列表的每个元素(即名称)并依次将 capitalizing
应用于每个元素。但是,该函数在内部循环其参数(在本例中,参数是名称字符串中的字符)并且 return 是每个名称中第一个字符的大写字母。 (你能看出原因吗?)
正如其他人所建议的那样,有 simpler/cleaner 种方法可以实现这一点,但如果您想了解 map
的工作原理,请删除 for
循环并简单地 return a.upper()
.
更容易理解地图,
print(list(map(lambda s: s.upper(), ['sisi', 'bibi', 'titi', 'carla'])))
您将 return 放置在 for 循环内,导致它在第一次迭代后变为 return(在传递给大写的字符串的第一个字符上)。例如:
capitalizing('sisi')
for item in a: # a = 'sisi'
b = item.upper() # item = 's', b = 'S'
return b # b = 'S', return 'S' and exit function
代码可以写得更简洁一些,其他答案已经显示了。这段代码做事是多余的。
这是您的代码的固定版本,在 for 循环完成构建字符串之后 return,而不是在第一次迭代之后:
my_pets = ['sisi', 'bibi', 'titi', 'carla']
def capitalizing(a):
b = ""
for item in a:
b += item.upper()
# using return here will exit the function immediately after the first iteration
return b # return after finishing
print(list(map(capitalizing, my_pets)))