列表的两种迭代之间有什么区别

时间:2013-01-12 11:28:10

标签: python

这是我的代码 我有两个不同的输出,[2]和[2,4,6],有人可以做一些解释吗?

list = [1,2,3]
def getdouble(l):
    result = []
    for i in l :
        i = i * 2
        result.append(i)
    return result

print getdouble(list)

def getdouble_v2 (l):
    result = []
    for i in range(len(l)):
        l[i] = l[i] * 2
        result.append(l[i])
    return result

print getdouble_v2(list)

3 个答案:

答案 0 :(得分:2)

获取所声明输出的唯一方法是文件中的缩进是否已损坏。确认您没有将空格和标签与python -tt混合。

答案 1 :(得分:0)

两个函数都为同一输入列表返回相同的result列表。但是,第二个函数也会在行l[i] = l[i] * 2中修改原始列表。第一个功能没有。

因此,第一个函数的结果是:

l = [1,2,3]
result = [2,4,6]

第二个功能的结果是:

l = [2,4,6]
result = [2,4,6]

答案 2 :(得分:0)

除了行

之外,您使用4个空格进行缩进
        return result

由标签缩进。这很不幸,因为你的编辑器将标签显示为4个空格,但Python将其视为8个空格,因此代码看起来像Python

list = [1,2,3]
def getdouble(l):
    result = []
    for i in l :
        i = i * 2
        result.append(i)
        return result

所以你看,它是在第一个项目附加到列表

之后返回的