【问题标题】:passing parameter with map function [duplicate]使用映射函数传递参数[重复]
【发布时间】:2016-05-06 20:17:23
【问题描述】:

说明
a = ['abc', 'efg', 'hij']

我想得到

a = ['abc!', 'efg!', 'hij!']

但显然没有使用for elements in a:...因为它不是切割器,我想更多地了解map 函数以及它如何传递参数。

所以我尝试使用 map 函数将'!' 附加到列表的所有元素。但在此之前,appendlist 方法,而不是 str 方法。

b = map(list,a) # gives : a = [['a','b','c'],['d','e','f'],['h','i','j']]
a = map(list.append(['!']), b) 

最后一个 map 函数返回一个 TypeError:

TypeError: append() takes exactly one argument (0 given)

我想知道是否可以将参数传递给map 使用的方法。 谢谢。

【问题讨论】:

  • 你需要合并一个lamba,但你不应该使用map来产生副作用,它会比常规循环慢,不知道你为什么这么想*但显然没有在a中使用for元素:...因为它不聪明 * 因为像你一样使用地图是一个更糟糕的想法
  • 我想避免人们用循环功能回答。就是这样。
  • 我也认为我的问题与“理解地图功能”有关,但更具体。它不是真正的复制品。感谢您的帮助:)

标签: python python-2.7


【解决方案1】:

您可以使用以下代码获得预期的结果:

a = ['abc', 'efg', 'hij']
map(lambda x: x + '!', a) # ['abc!', 'efg!', 'hij!']

map 的第一个参数是一个应用于iterable 上所有项目的函数,它是第二个参数。您不能直接将参数传递给map 的函数,但您可以创建另一个传递参数的函数(或lambda),就像上面的示例一样。

通常list comprehension 应该比map 更受青睐,因为你在做什么更明显:

[x + '!' for x in a] # ['abc!', 'efg!', 'hij!']

【讨论】:

  • 如果反对的选民能够评论问题以便改进响应,那就太好了。
  • 谢谢尼米。你的回答很棒。
【解决方案2】:

map 接收两个参数,一个函数和一个列表。

它为每个项目调用一次函数,并将当前项目作为参数。

由于map 返回的内容,将字符串转换为列表并附加到它们可能不是最佳选择,但实际上您可以使用+ 运算符将它们一起附加到字符串。

您可以通过执行以下操作来实现您想要的:

map(lambda s: s + '!', a)  # => ['abc!', 'efg!', 'hij!']

lambda只是函数的另一种语法,它的参数名为s,它返回s + '!'

【讨论】:

    【解决方案3】:

    使用list comprehension

    >>> a = ['abc', 'efg', 'hij']
    >>> ["{}!".format(x) for x in a]
    ['abc!', 'efg!', 'hij!']
    

    地图的工作原理

    映射(函数,迭代器)

    将元素逐一添加,并将指定的功能应用于每个元素

    例子:

    >>> def add_str(x):
    ...     return x+"!"
    ...
    >>> a
    ['abc', 'efg', 'hij']
    >>> map(add_str, a)
    ['abc!', 'efg!', 'hij!']
    

    【讨论】:

    • 除非他们说他们不想使用列表理解和学习地图功能。
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多