使用新值更新列表值 - Python

时间:2013-04-23 11:05:53

标签: python input

我真的不知道怎么问这个。我有一个最初设置为零的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))

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

5 个答案:

答案 0 :(得分: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])

答案 1 :(得分: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基本上采用数字列表,并返回包含同一索引中元素的元组列表。有关详细信息,请参阅docs
  • 如前所述,
  • map将函数应用于iterable中的每个元素,并返回一个列表。有关详细信息,请参阅docs

答案 2 :(得分: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]

答案 3 :(得分: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] 

答案 4 :(得分: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])