如果您有以下代码,请遵循以下文档:map(function, iterable,...)
?
x = sorted(map(int, dat[0].split()))
int
是一个函数,如果是,为什么它不是这样表达的?
答案 0 :(得分:3)
int
是一个构造函数,因此它可以调用,因此您可以将其与map
一起使用
答案 1 :(得分:3)
在你的情况下,dat[0]
是字符串,split()
通过在空白处拆分输入字符串来生成字符串列表。
例如
"1 11".split()
返回
["1", "11"]
map
函数有两个输入参数:
第一个参数是,它可以被称为(在Python中,你说它是可调用的),例如一个函数。 int
不是真正的函数,而是这样的东西(Python俚语:它是对象)。
例如int("3")
返回3
。因此,int
应用于字符串时会尝试将此字符串转换为整数,并返回整数值。
第二个参数是你可以迭代的东西,在你的情况下它是一个列表。
如果然后调用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]