for i in a: for j in b: i-j TypeError Traceback (most recent call last) <ipython-input-27-c822a6dc04a2> in <module>() 1 for i in a: 2 for j in b: ----> 3 i-j TypeError: unsupported operand type(s) for -: 'list' and 'list'
3 Réponses :
Cela peut être fait en utilisant une boucle while imbriquée comme ceci:
[[1, 1], [1, 1, 1], [1, 1]]
Donnant la sortie suivante:
a=[[1,2],[3,4,5],[4,5]] b=[[2,3],[4,5,6],[5,6]] i = 0 difference_list = [] while i < len(a): difference_list.append([]) j = 0 while j < len(a[i]): difference_list[i].append(b[i][j] - a[i][j]) j += 1 i += 1
Vous pouvez le faire avec une simple compréhension de liste imbriquée et zip()
a = [[1,2],[3,4,5],[4,5]] b = [[2,3],[4,5,6],[5,6]] l = [] for l1, l2 in zip(a, b): current = [] for n1, n2 in zip(l1, l2): current.append(n2 - n1) l.append(current)
zip()
est spécialement conçu pour associer des éléments comme celui-ci. Vous associez d'abord les listes correspondantes avec zip(a, b)
puis pour chaque élément de ces paires, vous associez les nombres avec zip(l1, l2)
.
Comme toutes les compréhensions de liste, vous pouvez bien sûr le faire en tant que boucle for
imbriquée:
a = [[1,2],[3,4,5],[4,5]] b = [[2,3],[4,5,6],[5,6]] difs = [[n2 - n1 for n1, n2 in zip(l1, l2)] for l1, l2 in zip(a, b)] # [[1, 1], [1, 1, 1], [1, 1]]
Vous pouvez le faire en utilisant des compréhensions de liste imbriquées. La première fournit une liste de différences entre deux listes et la deuxième la boucle à travers une liste de listes.
a = [[1,2],[3,4,5],[4,5]] b = [[2,3],[4,5,6],[5,6]] c = [[y-x for x,y in zip(list_a, list_b)] for list_a, list_b in zip(a,b)] c [[1, 1], [1, 1, 1], [1, 1]]
Similaire à stackoverflow.com/q/11677860/7954504 , mais avec des listes imbriquées ici
Ouais, mais je ne suis pas en mesure de comprendre comment faire avec les listes imbriquées car je suis nouveau sur python, ce serait reconnaissant si quelqu'un a aidé à résoudre ce problème !!
Voir aussi Comment effectuer des opérations arithmétiques élément par élément (par exemple ajouter, soustraire, multiplier) de deux listes de forme égale avec des imbrications arbitraires