有人可以解释以下函数的作用吗:
list()
map()
split()
在这一行代码的上下文中,请:
input = list(map(int,input().split()))
最后,应该是:
int,input()
而不是:
int(input())
谢谢!
所有这些函数都是标准库的成员,因此包含在官方文档中。
话虽如此,我将简要总结一下。
-
list
将可迭代对象转换为列表。在这种情况下,可迭代对象是一个map
对象。 -
map
接受一个函数f
(或任何可调用的,实际上(和一个可迭代的iter
,并生成另一个可调用对象,其中可调用对象应用于iter
中的每个元素。在您的情况下,可调用对象是
int
,它尝试将其参数转换为整数。map
是将函数应用于元素集合的常用术语,但"Pythonic"方法是使用列表推导:[f(x) for x in iterable] == list(map(f, iterable))
-
split
是一种str
对象的方法,它在每次出现给定分隔符时划分给定字符串,返回一个列表。如果省略分隔符参数,则默认为空格。
将它们放在一起,您正在从 stdin 读取输入,将生成的字符串拆分为多个字符串,将int
映射到每个项目(将它们转换为整数,或导致输入异常,如'words instead of numbers'
(并将映射转换为列表。
然后,通过将结果分配给input
来隐藏内置,这通常是一个坏主意(想象一下input()
导致错误时的混乱(。
回答你的第二个问题:不,因为map
需要两个单独的论点。
如果我在生产环境中使用它,我会稍微重写它:
try:
numbers = [int(n) for n in input('Space-separated integers, please: ').split()]
except ValueError as e:
print('I needed numbers. You gave me something else.')
要input
的参数是对用户的提示(当然,它是可选的(。
input().split()
从用户那里获取一行键盘输入,并返回单词列表(用空格分隔(。 例如,如果用户键入the quick brown fox
,它将返回['the', 'quick', 'brown', 'fox']
。
map()
接受一个函数和一个值序列,对序列中的每个值调用该函数,并返回所有结果的序列。 例如,map(int, ['1', '2', '3'])
将返回[1, 2, 3]
.
最后,list()
获取一系列值并将其作为列表返回。
因此,总体而言,您的示例代码行接受来自用户的输入字符串,将其拆分为单词列表,对每个单词调用int()
,并组合返回值的最终列表。
回答您的问题int
,是的,在这种情况下,这是正确的称呼方式。map()
接受一个函数对象;你实际上并不是在自己打电话给int()
。
让我们分解一下input = list(map(int,input().split()))
map(int, input().split())
调用int()
函数,该函数为从input().split()
返回的每个对象返回一个 int
现在map
在 Python 2.7 中返回一个列表对象,在 Python 3 中返回一个映射对象。如果您运行的是 2.7,那么list(..)
是无用的。在 3 中是必需的。
关于你的第二个问题,map()
需要两个论点,所以需要int, input()
,因为int(input())
被认为是一个单一的参数。
input = list(map(int,input().split()))