【问题标题】:Having some issues with for loops and list.append()for 循环和 list.append() 有一些问题
【发布时间】:2014-01-04 20:07:30
【问题描述】:

这是我正在运行的一些示例代码:

#!/usr/bin/python

x=[] 
for i in range(0,20):
    x.append(i) 
y=[] 
for i in x:
    y.append(-1*x[i])

for i in y:
    print i, y[i]

预期的输出是:

0    0
1    -1
2    -2
3    -3
4    -4
5    -5
6    -6
7    -7
8    -8
9    -9
10    -10
11    -11
12    -12
13    -13
14    -14
15    -15
16    -16
17    -17
18    -18
19    -19

相反,我得到:

0 0
-1 -19
-2 -18
-3 -17
-4 -16
-5 -15
-6 -14
-7 -13
-8 -12
-9 -11
-10 -10
-11 -9
-12 -8
-13 -7
-14 -6
-15 -5
-16 -4
-17 -3
-18 -2
-19 -1

这是为什么?

【问题讨论】:

    标签: python arrays for-loop


    【解决方案1】:

    您可以使用enumerate 来获得您想要的输出:

    for i,val in enumerate(y):
        print (i, val)
    

    您的问题是for i in y 为您提供了 y 中的实际元素。然后在打印 y[i] 时将它们用作索引。当您使用负数作为索引时,它会从列表末尾倒数(因此 y[-1] 是列表中的最后一个值,y[-2] 是倒数第二个,等等)。

    【讨论】:

    • 没问题 :) 如果您觉得我或其他人的回答对您有所帮助,请投票并accept他们的回答。
    【解决方案2】:
    for i in y:
        print i, y[i]
    

    打印 i(来自 y)和 y[1],它也访问 y。我想你想要:

    for i in x:
        print i, y[i]
    

    有趣的是,由于您的原始代码发送负数作为 y 的索引(即 y[-1]),因此它从末尾获取元素并向后移动。有趣。

    【讨论】:

      【解决方案3】:

      for i in y产生索引。它产生已经存储在y 中的数字,范围从0 到-19。然后将这些负索引重新应用y,为您提供从列表末尾开始计数的索引。

      换句话说,在第一次迭代中,y[0]0 并打印 0, 0。第二次迭代,y[1]-1,而y[-1]y 中的最后一个元素是-19,因为当使用负索引时,列表的长度被添加到索引中,所以-1 -19被打印。等等。

      将索引与列表值一起打印的 Pythonic 方法是使用enumerate();像这样:

      for i, value in enumerate(y):
          print i, value
      

      但你也可以这样做:

      for i in range(len(y)):
          print i, y[i]
      

      【讨论】:

        【解决方案4】:

        问题是由于在最后一个循环中for i in yi 分配了每个,而不是索引。因此,i 被分配了-1-2、...、-19 等等。访问列表的负索引-i 会返回从列表后面开始计数的第 i 个元素。

        >>> [1, 2, 3, 4, 5, 6][-1]
        6
        >>> [1, 2, 3, 4, 5, 6][-4]
        3
        

        【讨论】:

          【解决方案5】:

          试试这个(对最后一行进行了更改):

          x=[] 
          for i in range(0,20):
              x.append(i) 
          y=[] 
          for i in x:
              y.append(-1*x[i])
          
          for i in y:
              print x[-i], y[-i]
          

          【讨论】:

            【解决方案6】:

            意外的输出是由最后一个循环引起的。

            for i in y:
            

            i 循环遍历 y 的值,即您在第一列中看到的值

            因为在这个循环中 i 的值是负数,所以你将从末尾开始的索引首先从 -1 开始,等于最后一个元素,-2 是倒数第二个,等等。当然,零索引是非-负数和数组开头的索引

            要获得您期望的 i 值,您可以遍历 x[] 中的值或 y 中的索引值范围

            for i in x:
                print i, y[i]
            

            for i in range(0,len(y)):
                print i, y[i]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-11-29
              • 2019-04-08
              相关资源
              最近更新 更多