一个函数,用于将函数应用于列表

时间:2013-10-25 17:02:53

标签: python python-2.7

我正在尝试编写一个将函数应用于列表的函数。我试图将列表中的所有单词大写,但无法使其工作。这是我到目前为止所做的:

list = ("hello", "this", "is", "a", "test")

def firstFunction(x):
    return list.upper()

print firstFunction

我得到的错误是:

<function firstFunction at 0x0000000002352A58>

我真的不知道接下来要做什么,任何帮助都会非常感激。

编辑: 我刚刚更改了它,但它仍然无效:

mylist = ("hello", "this", "is", "james")

def firstFunction(x):
    return may(lambda: x.upper(), mylist)

print firstFunction()

6 个答案:

答案 0 :(得分:4)

这不是错误。它是内存中函数的地址。你看到它是因为你没有调用该函数。

总的来说,您的代码存在三个问题:

  1. 您没有调用该函数。在它之后添加(...)将执行此操作。
  2. 你没有传递一个它需要的函数的参数。
  3. 元组上没有upper方法(在这种情况下,list是一个元组)。
  4. 以下是执行我认为您想要的代码的固定版本:

    # Don't name a variable 'list' -- it overshadows the built-in.
    lst = ("hello", "this", "is", "a", "test")
    
    def firstFunction(x):
        return tuple(y.upper() for y in x)
    
    print firstFunction(lst)
    

    输出:

    ('HELLO', 'THIS', 'IS', 'A', 'TEST')
    

    以下是对此处所做的一切的一些参考:

    http://docs.python.org/2/reference/compound_stmts.html#function-definitions

    https://wiki.python.org/moin/Generators

    http://docs.python.org/2.7/library/stdtypes.html#str.upper

答案 1 :(得分:4)

虽然其他答案很棒,但我想提一下,python中已经有一个名为map()的函数,它几乎完全符合您的需求:

  

将函数应用于iterable的每个项目并返回一个列表   结果.....可迭代   参数可以是序列或任何可迭代对象;结果是   总是一个清单。

所以你的代码变成了

print map(str.upper, lst)

或者,如果你需要一个元组,那么:

print tuple(map(str.upper, lst))

这里不需要匿名lambda函数,因为str.upper()接受一个参数。我认为这个函数式编程是如何pythonic的争论,但我个人有时喜欢它。

答案 2 :(得分:3)

实际上也没有列表,元组也没有方法.upper()。 因此,要实现这一点,您只需执行以下语句:

print tuple(x.upper() for x in ("hello", "this", "is", "a", "test"))

http://codepad.org/MZ14yXeV

或者这个:

print map(lambda x: x.upper(), ("hello", "this", "is", "a", "test"))

http://codepad.org/kc1LaNCY

答案 3 :(得分:1)

list = ("hello", "this", "is", "a", "test")

是一个元组,一个不可变的,你不能改变它,使用,

print tuple((ele.upper() for ele in list))

答案 4 :(得分:1)

我认为这是最蟒蛇的:

def cap(tup):
    return map(str.upper, tup)

>>> tup = ("hello", "this", "is", "a", "test")
>>> cap(tup)
['HELLO', 'THIS', 'IS', 'A', 'TEST']
>>>

答案 5 :(得分:0)

您要做的是list comprehensions

print [firstFunction(x) for x in list]

这样做:构造列表,其元素是应用函数的结果 输入列表中的每个项目然后打印它。

一些(希望有用的)评论

  • 命名变量list是不好的做法;即使它不是关键字, 它是基本python类型的名称,因此重新绑定它可能会导致混淆 别处。
  • 在您的定义def firstFunction(list)中出现的名称list 参数列表与前面示例中定义的list变量没有任何关系。您可能需要查看this question或python文档以了解作用域规则在python中的工作方式。