1

我真的不知道怎么问这个。我有一个最初设置为零的 3 个值的列表。然后我一次从用户那里读取 3 个值,我想用我读取的新值更新列表中的 3 个值。

cordlist = [0]*3

输入:3 4 5

我希望列表现在看起来像: [3, 4, 5]

输入:2 3 -6

列表现在应该是 [5, 7, -1]

我该怎么做呢?这就是我所拥有的:

cordlist += ([int(g) for g in raw_input().split()] for i in xrange(n))

但这只是添加了一个新列表,并没有真正更新上一个列表中的值

4

5 回答 5

2
In [17]: import numpy as np

In [18]: lst=np.array([0]*3)

In [19]: lst+=np.array([int(g) for g in raw_input().split()])

3 4 5

In [20]: lst
Out[20]: array([3, 4, 5])

In [21]: lst+=np.array([int(g) for g in raw_input().split()])

2 3 -6

In [22]: lst
Out[22]: array([ 5,  7, -1])
于 2013-04-23T11:18:56.163 回答
1

我会做这样的事情:

cordlist = [0, 0, 0]
for i in xrange(n):
    cordlist = map(sum, zip(cordlist, map(int, raw_input().split())))

分解:

  • map(int, raw_input().split())相当于[int(i) for i in raw_input().split()]
  • zip基本上接受一个数字列表,并返回一个包含相同索引中元素的元组列表。有关更多信息,请参阅文档
  • map,正如我之前解释的,将函数应用于迭代中的每个元素,并返回一个列表。有关更多信息,请参阅文档
于 2013-04-23T11:11:19.987 回答
1
cordlist = [v1+int(v2) for v1, v2 in zip(cordlist, raw_input().split())]

像这样测试:

l1 = [1,2,3]
l2 = [2,3,4]
print [v1+v2 for v1, v2 in zip(l1, l2)]

结果:[3,5,7]

于 2013-04-23T11:16:26.497 回答
0

我会这样使用itertools.zip_longest

from itertools import zip_longest

def add_lists(l1, l2):
    return [int(i)+int(j) for i, j in zip_longest(l1, l2, fillvalue=0)]

result = []
while True:  
    l = input().split()
    print('result = ', add_lists(result, l))

输出:

>>> 1 2 3
result =  [1, 2, 3]
>>> 3 4 5
result =  [4, 6, 8] 
于 2013-04-23T11:16:13.597 回答
0

@namit 的 numpy 解决方案的更紧凑版本

>>> import numpy as np
>>> lst = np.zeros(3, dtype=int)
>>> for i in range(2):
        lst += np.fromstring(raw_input(), dtype=int, sep=' ')


3 4 5
2 3 -6
>>> lst
array([ 5,  7, -1])
于 2013-04-23T11:38:07.317 回答