蟒蛇输入函数解释



有人可以解释以下函数的作用吗:

list()
map()
split()

在这一行代码的上下文中,请:

input = list(map(int,input().split()))

最后,应该是:

int,input()

而不是:

int(input())

谢谢!

所有这些函数都是标准库的成员,因此包含在官方文档中。

话虽如此,我将简要总结一下。

  1. list将可迭代对象转换为列表。在这种情况下,可迭代对象是一个map对象。

  2. map接受一个函数f(或任何可调用的,实际上(和一个可迭代的iter,并生成另一个可调用对象,其中可调用对象应用于iter中的每个元素。

    在您的情况下,可调用对象是int,它尝试将其参数转换为整数。map是将函数应用于元素集合的常用术语,但"Pythonic"方法是使用列表推导:

    [f(x) for x in iterable] == list(map(f, iterable))
    
  3. 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()))

最新更新