在python中使用map函数

时间:2011-09-29 07:30:19

标签: python

如果您有以下代码,请遵循以下文档:map(function, iterable,...)

x = sorted(map(int, dat[0].split()))

int是一个函数,如果是,为什么它不是这样表达的?

5 个答案:

答案 0 :(得分:3)

int是一个构造函数,因此它可以调用,因此您可以将其与map一起使用

答案 1 :(得分:3)

在你的情况下,dat[0]是字符串,split()通过在空白处拆分输入字符串来生成字符串列表。

例如

"1 11".split()

返回

["1", "11"]

map函数有两个输入参数:

  1. 第一个参数是,它可以被称为(在Python中,你说它是可调用的),例如一个函数。 int不是真正的函数,而是这样的东西(Python俚语:它是对象)。    例如int("3")返回3。因此,int应用于字符串时会尝试将此字符串转换为整数,并返回整数值。

  2. 第二个参数是你可以迭代的东西,在你的情况下它是一个列表。

  3. 如果然后调用map函数,则第一个参数将应用于第二个参数的所有元素。 所以

    map(int, ["1", "11"])
    

    返回

    [1, 11]
    

    如果你把我解释的内容结合起来就明白了

    map(int, "1 11".split())
    

    返回

    [1, 11]
    

答案 2 :(得分:1)

当你问“为什么不是这样表达”时,我想你的意思是,为什么它没有像功能这样的括号?答案是如果你把括号放在那里你得到函数做什么而不是函数本身。比较您输入int()int时的情况。

答案 3 :(得分:1)

想象这个

def map( function, iterable ):
    return ( function(x) for x in iterable )

x = sorted(map(int, dat[0].split()))中,函数int命名为,而不是已评估。此代码为map函数提供了一个函数对象。 map函数将评估给定的函数。

答案 4 :(得分:0)

最简单形式的map语法是:

map(func, sequence)

它将应用函数" func"在序列的每个元素上并返回序列。万一你不知道,int()是一个函数。

>>> int(2.34)
2
>>> int("2")
2
>>> a = ["1", "101", "111"]
>>> map(int, a)
[1, 101, 111]

现在,我将为您提供map()的实现。

>>> for index in range(len(a)):
...     a[index] = int(a[index])
... 
>>> a
[1, 101, 111]

如果你理解了这个概念,那就让我们更进一步。我们使用基数10(这是int()的默认基础)将字符串转换为int。如果你想用base 2转换它怎么办?

>>> a = ["1", "101", "111"]
>>> for index in range(len(a)):
...     a[index] = int(a[index], 2) # We have an additional parameter to int()
...     
>>> a
[1, 5, 7]

要使用map()获得相同的结果,我们将使用lambda函数

>>> a = ["1", "101", "111"]
>>> map(lambda x: int(x, 2), a)
[1, 5, 7]