为列表中的值范围添加值?
考虑一下这个范围数组:
a = [[[4251, 4254], [4123, 4290]], [[4323, 4222], [4111, 4900]]]
还有一个一维数组:
b = [1324, 2745]
我想通过把数组 b
的第一个元素加到数组 a
中所有第一个范围的元素上,来创建一个新数组;然后把数组 b
的第二个元素加到数组 a
中所有第二个范围的元素上,也就是说:
[[[4251+1324, 4254+1324], [4123+1324, 4290+1324]], [[4323+2745, 4222+2745], [4111+2745, 4900+2745]]]
我该怎么在Python中实现这个呢?
6 个回答
0
A. 你可以像这样遍历你的 a
元素,但这样会改变元素本身。
for ind in range(len(a)):
a[ind][0] += b[0]
a[ind][1] += b[1]
B. 你可以使用列表推导式:
c = [[item[0] + b[0], item[1] + b[1]] for item in a]
C. 你可以使用 map
函数:
c = map(lambda x: [x[0] + b[0], x[1] + b[1]], a)
0
你可以使用列表推导式:
遍历 a[0]
中的每一组值,然后把 b[0]
和 b[1]
加到每一组值上。
new_array = [(value[0] + b[0], value[1] + b[1]) for value in a[0]]
输出结果:
[(9202.148420979294, 10914.617520503674), (9547.671691519925, 11121.3978601696), (6051.066546425717, 7475.276168393144), (6823.189988705855, 8465.1839186014), (1682.5556534015782, 3108.045895057453), (22305.0, 23726.0), (1539.1488854866, 2975.6226734478), (1707.1488854866, 3143.6226734478), (4145.294248573335, 5583.434606202038), (5824.079452685, 7443.9945330296), (11739.852743984931, 13729.246567556096), (9513.62385030349, 10937.820957812448), (30892.28005012768, 32313.662880091983)]
0
这可以通过在Python中使用列表推导来实现。
a = [[1,2],[2,3],[3,4]]
b = [5,9]
[(x[0]+b[0], x[1]+b[1]) for x in a]
解释
for x in a
- 遍历列表 a
x[0]
- 子列表的第一个元素
x[0]+b[0]
- 将 a
中每个元素的第一个元素与 b
中的第一个元素相加
x[1]+b[1]
- 将 a
中每个元素的第二个元素与 b
中的第二个元素相加
输出
[(6, 11), (7, 12), (8, 13)]
0
使用numpy
>>>import numpy as np
>>>a =np.array( [[4251, 4254], [4123, 4290], [4323, 4222], [4111, 4900]])
>>>b =np.array([1324, 2745])
>>>a+b
array([[5575, 6999],
[5447, 7035],
[5647, 6967],
[5435, 7645]])
2
这段代码应该适用于任何长度的情况(前提是 a
和 b
的长度要相同)
[[[i+b[k],j+b[k]] for (i,j) in a[k]] for k in range(len(a))]
在你的例子中:
>>> pprint([[[i+b[k],j+b[k]] for (i,j) in a[k]] for k in range(len(a))])
[[[7880.1484209792943, 8171.6175205036743],
[8225.6716915199249, 8378.3978601695999],
[4729.0665464257172, 4732.276168393144],
[5501.1899887058553, 5722.1839186014013],
[360.55565340157807, 365.04589505745309],
[20983.0, 20983.0],
[217.14888548659997, 232.6226734478],
[385.14888548659997, 400.62267344780003],
[2823.2942485733347, 2840.4346062020377],
[4502.0794526850004, 4700.9945330295996],
[10417.852743984931, 10986.246567556096],
[8191.6238503034892, 8194.8209578124479],
[29570.28005012768, 29570.662880091983]],
[[3250.5273987094843, 3252.7610916503263],
[5593.4838299153871, 5596.0104208719731],
[576.2276993911745, 622.11755144656183],
[3188.3893120098983, 3206.7951214629902],
[3246.2448304681798, 3250.0964343653186],
[3272.9341862125516, 3274.8892802899418],
[5969.1472437958755, 5971.2996518169357],
[4255.3500559453041, 4258.126659789853]]]