在range()for循环中,使用索引更改列表中的值

时间:2018-01-12 17:18:24

标签: python

对于我要进行的Python考试的一部分,我必须编写给定代码的输出,因为它将在Python shell中执行。

我无法理解这个问题:

>>> print(Ttrain)

   Age    Age_Group
0    0      Missing
1   10        Young
2   20        Adult
3   30        Adult
4   40        Adult
5   50  Middle_Aged
6   60  Middle_Aged
7   70          Old

我对这个问题的理解是针对每个alist = [1] * 10 #[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] for i in range(1, 10): #from 1 up to and not including 10 - 1 2 3 4 5 6 7 8 9 alist[i] += alist[i-1] print(alist) ,1 - 9,i in range(1, 10)i的索引等于alist的索引+索引i。我的原始输出是:

i-1

实际输出是:

[1, 2, 5, 7, 9, 11, 13, 15, 17]

为了尝试了解发生了什么,我尝试用[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 替换[i-1]并获得输出:

[i]

我尝试过各种书面输出来尝试匹配正确的答案,但我似乎无法找到正确的方法。如果有人能帮我理解[1, 2, 2, 2, 2, 2, 2, 2, 2, 2] 发生的事情,或者我的理解在别处被误解,我会非常感激。

1 个答案:

答案 0 :(得分:1)

因此,您的循环以1值列表开头。然后运行一个循环,将索引的值前面索引的值相加。

要么您错过了值“实时”,所以每次引用alist[i]时,都会生成当前对象你将i误解为要求的值,而不仅仅是列表的索引。

我添加了一些印刷语句来说明实际情况:

>>> alist = [1] * 4   # smaller for demo conciseness
>>> for i in range(1, 4):
...     print(f' --- {i} ---')
...     print(f'before {alist}')
...     print(' ' * (4 + (i * 3)), 'i -^')
...     print(f'alist[i]: {alist[i]}, alist[i-1]: {alist[i-1]}')
...     alist[i] += alist[i-1]
...     print(f'after: {alist}\n')
...
 --- 1 ---
before [1, 1, 1, 1]
        i -^
alist[i]: 1, alist[i-1]: 1
after: [1, 2, 1, 1]

 --- 2 ---
before [1, 2, 1, 1]
           i -^
alist[i]: 1, alist[i-1]: 2
after: [1, 2, 3, 1]

 --- 3 ---
before [1, 2, 3, 1]
              i -^
alist[i]: 1, alist[i-1]: 3
after: [1, 2, 3, 4]

注意alist[i-1]值如何反映前一次迭代中存储的结果;您没有添加1 + 1,而是要添加1 + previous result