Rozważ tablicę wahań:

 a = [[[4251, 4254], [4123, 4290]], [[4323, 4222], [4111, 4900]]]

Inna jednowymiarowa tablica:

  b = [1324, 2745]

Chcę utworzyć nową tablicę, dodając pierwszy element tablicy b do wszystkiego pierwszego zestawu zakresów w tablicy a i dodaj drugi element tablicy b do wszystkich drugi zestaw zakresów W Array a IE

 [[[4251+1324, 4254+1324], [4123+1324, 4290+1324]], [[4323+2745, 4222+2745], [4111+2745, 4900+2745]]]

Jak mogę to zrobić w Pythonie?

0
user3405360 13 sierpień 2014, 16:34

4 odpowiedzi

Najlepsza odpowiedź

Powinno to działać na dowolną długość (pod warunkiem {x0}} i b mają tę samą długość)

[[[i+b[k],j+b[k]] for (i,j) in a[k]] for k in range(len(a))]

W Twoim przypadku:

>>> 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]]]
2
fredtantini 13 sierpień 2014, 12:47

Możesz użyć rozumienia list:

ITERSER Over a[0] i dla każdego zestawu wartości dodaj b[0] i b[1].

new_array = [(value[0] + b[0], value[1] + b[1]) for value in a[0]]

Wynik:

[(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
Kobi K 13 sierpień 2014, 12:46

A. Możesz zawsze iterować swoje elementy a, ale to zmienia się same elementy

for ind in range(len(a)):
    a[ind][0] += b[0]
    a[ind][1] += b[1]

B. Możesz użyć kompensacji listy:

c = [[item[0] + b[0], item[1] + b[1]] for item in a]

C. Możesz użyć map:

c = map(lambda x: [x[0] + b[0], x[1] + b[1]], a)
0
mikhail 13 sierpień 2014, 12:47

Można to osiągnąć przy użyciu rozumienia listy w Pythonie.

a = [[1,2],[2,3],[3,4]]
b = [5,9]


[(x[0]+b[0], x[1]+b[1]) for x in a]

Wyjaśnienie

for x in a - Itera na liście a
x[0] - pierwszy element podrzędny
x[0]+b[0] - Dodaj pierwszy element każdego elementu w a za pomocą pierwszego elementu w b
x[1]+b[1] - Dodaj drugi element każdego elementu w a z drugim elementem w b

Wyjście

[(6, 11), (7, 12), (8, 13)]
0
cppcoder 13 sierpień 2014, 15:30