Вычесть список в списке с тем же списком в Python

1

У меня есть список, как показано ниже:

A=[[1,2,3],[4,5,6],[7,8,9]]

Теперь я хотел бы вычесть все списки в с B

B=[1,1,1]

для получения следующего результата: C:

C=[[0,1,2],[3,4,5],[6,7,8]]

Я знаю, что я могу использовать zip для вычитания двух списков, но я не могу использовать его непосредственно в списке в списке. Как я могу сделать вычитание выше? Спасибо

Теги:
arrays
list
python-3.x
list-comprehension

4 ответа

3
Лучший ответ

Использование представления списка с помощью zip:

C = [[a-b for a, b in zip(sublist, B)] for sublist in A]

В качестве альтернативы, используя подсчет списка с enumerate:

C = [[j-B[i] for i, j in enumerate(sublist)] for sublist in A]

Используя стороннюю библиотеку NumPy, вы можете использовать широковещательную передачу для вывода массива:

import numpy as np

A = np.array([[1,2,3],[4,5,6],[7,8,9]])
B = np.array([1,1,1])

C = A - B

print(C)

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
2

Использование numpy.

Демо - версия:

import numpy as np
A=[[1,2,3],[4,5,6],[7,8,9]]
B=[1,1,1]
C = [list(np.array(i) - np.array(B)) for i in A]
print(C)

Использование operator.sub

from operator import sub
A=[[1,2,3],[4,5,6],[7,8,9]]
B=[1,1,1]
C = [list(map(sub, i, B)) for i in A]
print(C)

Выход:

[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
0

Вот альтернативный подход без использования NUMPY -

for innerList in A:
    newInner = []
    for j in range(0, len(innerList)):
        newInner.append(innerList[j] - B[j])
    C.append(newInner)
0
import operator
A=[[1,2,3],[4,5,6],[7,8,9]]B=[1,1,1]
B=[1,1,1]
C=[list(map(operator.sub, i,B)) for i in A]
print C
  • 1
    Ответы только для кода не так полезны, как код с описанием того, как / почему он решает проблему ОП.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню