【问题标题】:Can anyone explain me what this Python 3 command do?谁能解释一下这个 Python 3 命令的作用?
【发布时间】:2019-02-07 15:44:55
【问题描述】:

我是 Python 编程的初学者。我已经检查了这些方法分别做了什么,但没有得到一个整体。这是一个程序作为问题的答案编写: 编写一个程序以倒序打印数组的所有元素

if __name__ == '__main__':                          #1   
    n = int(input())                                #2
                                                    #3
    arr = list(map(int, input().rstrip().split()))  #4
    for i in range(n):                              #5
        print(arr[-i-1],end=' ')                    #6

我没有得到第 4 行。谁能逐步解释该行在做什么?他们是如何工作并给出整体输出的?输入由空格分隔:

5            #length of the array
1 2 3 4 5     #inputs separated by space

【问题讨论】:

    标签: python python-3.x split


    【解决方案1】:

    这是从空格分隔的数字输入中创建ints 的list 的“pythonic”方式:

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

    它从map(...) 的结果中创建一个列表,该列表返回一个生成器。

    map 接受一个函数并将其应用于第二个可迭代参数的所有元素。

    input().
    rstrip().
    split() 接受输入,删除右侧的所有空格并将其拆分为空格上的部分,然后将其作为可迭代输入到map(int, ...),它通过将int 应用于给定迭代的所有元素来创建生成器结果。 map 的结果被输入到list(...) 中,并从中生成一个列表。

    "1 2 3 4" => ["1","2","3","4"] -> generator (1,2,3,4) -> [1,2,3,4]
    

    【讨论】:

      【解决方案2】:

      input() 看起来像是获得了下一行输入。 在示例中,这是字符串 "1 2 3 4 5\n"(末尾有一个换行符)。

      rstrip() 然后删除输入右端的空格,包括换行符。

      split() 没有参数在空格上拆分,将输入转换为可迭代的字符串。例如['1', '2', '3', '4', '5']

      map(int, sequence) 将 int 应用于每个字符串。例如int('1') -> 1int('2') -> 2 等。所以你的字符串序列现在是一个整数序列。

      最后list(seq) 将序列转换为列表类型。所以现在你有[1,2,3,4,5]

      【讨论】:

      • rstrip() 从哪里删除空格
      • rstrip() “剥离”字符串的右端,删除空格。这包括空格、制表符和换行符。所以你的 input() 是"12345\n",然后 rstrip() 只给出"12345"
      • Map 对序列 (arg2) 中的每个项目调用一个函数 (arg1)。在您的示例中,函数是 int 函数。序列是字符串“1”、“2”、“3”、“4”、“5”。结果是将数字字符串转换为整数序列。打印时看起来一样,但字符串“1”+“2”是“12”。但整数 1+2 = 3。
      • 那么在python中输入总是自动变成字符串?无论我输入什么(整数或浮点数)?因为,给予时的输入是1 2 3 4 5,但是,你说输入()是"12345\n"。那么我是否需要在每个程序(包括数组)中使用此第 4 行?
      • @tarit 你看错了。您的输入不包含在字符串中 - 它是一个字符串(即使它是一串数字)!发生的情况是字符串根本没有转换为任何东西。
      【解决方案3】:

      在这一行

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

      input():默认情况下它以字符串作为输入。

      map(aFunction, aSequence) 函数将传入函数应用于可迭代对象中的每个项目,并返回一个包含所有函数调用结果的列表。因此,所有由空格分隔的字符串条目都将转换为整数。

      参考:https://www.bogotobogo.com/python/python_fncs_map_filter_reduce.php

      split():该函数用于将字符串中的所有条目用空格分割。

      rstrip():此函数用于去除数组输入(1 2 3 4 5)末尾存在的空格

      【讨论】:

      • map 返回一个生成器——而不是一个列表。
      • rstrip 仅从字符串的右侧剥离 - 不是从任何数组中剥离,也不是从左侧剥离。
      • 很高兴为 SO 做出贡献,但是...作为旁注:与现有答案相比,您的答案没有增加任何新内容...
      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多