请问现在有一个A list和一个B list,每个list中都有100个整数,我想计算得出一个新的c list, c list中的每项是这样的,A[0],,A[1]+B[0],,A[2]+B[1]+B[0],,A[3]+B[2]+B[1]+B[0]...............A[100]+B[99]+B[98]+B[97]+.......B[1]+B[0],,,,求大神解答?给个简单的例子吧,假如A = [30,52,84,92],,,B = [4,3,2,1],,,我现在想得到Clist [30,56,91,101]。30即A[0],56即A[1]+B[0],以此类推,但是我现在有很多数据,远远超过4个,所以求大神给个程序。
3 回答
已采纳
qq_青枣工作室_0
TA贡献446条经验 获得超754个赞
A = [30,52,84,92] B = [4,3,2,1] C = [] for i in range(len(A)): C.append(A[i] + sum(B[0:i])) print C
清波
TA贡献165条经验 获得超90个赞
既然有人给出, 循环求解 和 列表生成式求解了, 那我就给出另一种解吧:
强大的BIF
A = [30,52,84,92] B = [4,3,2,1] C = map(lambda x:x[1]+sum(b[0:x[0]]),enumerate(a)) ## Python 3.x 需要对 map 函数 列表化(不建议对map 类型列表化, 否则官方就白白升级map函数了): C = list(map(lambda x:x[1]+sum(b[0:x[0]]),enumerate(a)))
最后,纠正 提供列表生成式 解答的一点bug, 如果 A 列表中 有重复的元素, 用 A.index(a) 来获取元素的 index 是错误的, 所以建议 列表生成式求解 这么写:
c = [value+sum(b[0:index]) for index,value in enumerate(a)]
我猜 这个才是这个问题的最优解,也许比 map 更快,懒得测试了,有兴趣的同学可以试试。
qq_咖啡丶彼岸_03525439
TA贡献1条经验 获得超0个赞
# 楼上正解, 我再给个邪门歪道(要确保listA中的元素不重复才行)
A = [30,52,84,92] B = [4,3,2,1] print [a+sum(B[0:A.index(a)]) for a in A] # [30, 56, 91, 101]
添加回答
举报
0/150
提交
取消