【问题标题】:Map Function of Python 2Python 2 的映射函数
【发布时间】:2016-05-23 06:31:38
【问题描述】:

您好,我正在运行以下代码

arr = map(int,raw_input().strip().split(' '))
for x in arr:
    print(arr[x-1])

我的输入是

0 1 2 3 4 5

我期待输出

0 1 2 3 4 5

但它正在显示

5 0 1 2 3 4

谁能解释一下为什么会这样?

【问题讨论】:

  • 改用for x in arr: print(x)
  • 搞错了谢谢大家

标签: python dictionary input


【解决方案1】:

在此声明之后:

arr = map(int,raw_input().strip().split(' '))

arr 的值为:

[0, 1, 2, 3, 4, 5]

当您遍历arr 并使用x-1 时,第一个打印语句变为arr[0-1],实际上arr[-1] 是最后一个元素。

for x in arr:
    print(arr[x-1])

# x = 0 => arr[0-1] => arr[-1] => 5
# x = 1 => arr[1-1] => arr[0]  => 0
# x = 2 => arr[2-1] => arr[1]  => 1
# x = 3 => arr[3-1] => arr[2]  => 2
# x = 4 => arr[4-1] => arr[3]  => 3
# x = 5 => arr[5-1] => arr[4]  => 4

如果您只想打印值:

for x in arr:
    print(x)

【讨论】:

    【解决方案2】:

    x0 变为 5。 (请注意,它们是值,而不是索引。)x - 1 因此以-1 开头,然后以0 继续到4arr[-1]arr 的最后一个元素(负索引从末尾倒数),然后你得到前 5 个带有 arr[0]...arr[4] 的元素。

    基本上,你真的只是想要

    for x in arr:
        print(x)
    

    【讨论】:

      【解决方案3】:

      试试这个代码:

      test = raw_input("Enter numbers separated by a space")
      
      arr = map(int,test.strip().split(' '))
      for x in arr:
         print(x), #, prints on the same line in Python 2.7
      

      输出:

      0 1 2 3 4 5
      

      你可以自己测试一下here

      此问题的其他答案将给出不在同一行的输出:

      0 
      1 
      2 
      3 
      4 
      5
      

      【讨论】:

        【解决方案4】:

        第一次迭代时,x=0

        然后代码执行arr[x-1],它被解释为arr[0-1]arr[-1]。在python中,负数列表索引被解释为从列表后面开始的索引,所以arr[-1]arr[len(arr)-1]一样,也就是arr[4],也就是最后一个元素。

        【讨论】:

          猜你喜欢
          • 2020-03-17
          • 1970-01-01
          • 2013-09-26
          • 2022-12-17
          • 2023-01-30
          • 1970-01-01
          • 2018-11-13
          • 2011-08-04
          • 1970-01-01
          相关资源
          最近更新 更多