从一个元组中减去一个元组中的三个列表

2024-05-29 06:28:38 发布

您现在位置:Python中文网/ 问答频道 /正文

最好的方法是什么?希望能有所不同,但不是像这样可怕的方式。对于每个A,B,C,它从subtract from中减去

A = [500, 500, 500, 500, 5000]
B = [100, 100, 540, 550, 1200]
C = [540, 300, 300, 100, 10]
triples= [tuple(A),tuple(B), tuple(C)]
subtract_from = tuple([1234,4321,1234,4321,5555])
diff = []

for main in subtract_from:
   for i in range(len(triples)):
      for t in triples[i]:
          diff[i].append(main-t)

Tags: 方法infromforlenmain方式diff
3条回答

尝试以下操作:

all_lists = [A, B, C]

[[i-j for i,j in zip(subtract_from,l)] for l in all_lists]

[
  [734, 3821, 734, 3821, 555],
  [1134, 4221, 694, 3771, 4355],
  [694, 4021, 934, 4221, 5545]
]

这是最好的做法。不需要导入任何库,只需要使用内置的。你知道吗

您可以尝试使用map和operator:

import operator

A = [500, 500, 500, 500, 5000]
B = [100, 100, 540, 550, 1200]
C = [540, 300, 300, 100, 10]

l = [A, B, C]

subtract_from = [1234,4321,1234,4321,5555]
diff = list((list(map(operator.sub, subtract_from , i)) for i in l))

print(diff)
# [[734, 3821, 734, 3821, 555], [1134, 4221, 694, 3771, 4355], [694, 4021, 934, 4221, 5545]]

首先,如果需要元组,请显式使用元组而不转换列表。也就是说,你应该这样写:

a = 500, 500, 500, 500, 5000
b = 100, 100, 540, 550, 1200
c = 540, 300, 300, 100, 10

vectors = a, b, c

data = 1234, 4321, 1234, 4321, 5555

diff = [
    [de - ve for de, ve in zip(data, vec)]
        for vec in vectors
]

如果需要元组列表,请使用tuple(de - ve for de, ve in zip(data, vec))而不是[de - ve for de, ve in zip(data, vec)]。你知道吗

相关问题 更多 >

    热门问题