为什么Python列表在下面的代码修改得到

时间:2019-02-02 21:22:47

标签: python

我要传递三个列表,目前正在使用两个列表构成一个附加列表。但是在这样做时,用于加法的列表(在这种情况下为A和P)正在被修改。为什么会发生?

def solve(A, P, Q):
# Your Code Here
    add=[A[i]+P[i] for i in range(len(list(A)))]
    return add

T = int(input())
for _ in range(T):
    n = int(input())
    A = map(int, input().split())
    P = map(int, input().split())
    Q = map(int, input().split())
    print(list(A))                # getting value in list 
    out_ = solve(A, P, Q)
    print(list(A))                # not getting value in list 
    print(list(Q))                
    print (out_)                  

为什么我在求解功能之前在列表A中获得了价值,但在我未修改列表A之后却没有获得价值?另外,我不是在OUT_也得到任何东西。

输出:

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

1 个答案:

答案 0 :(得分:3)

在Python 3中,map()不会返回列表,而是一个“地图对象”,它是一个 iterator

每当调用list()上的结果map(),在第一次迭代全用完。第二次,它是空的。

>>> A = map(int, "123")
>>> list(A)
[1, 2, 3]
>>> list(A)
[]

如果你从来没有使用list()除了调用之后map(),您的代码应工作。

A = list(map(int, input().split()))

但是,这基本上是一个列表理解:

A = [int(s) for s in input().split()]