Par exemple, il y a 2 listes.

list_1= [1, 2, 3]
list_2 = [2, 0, 4]

Une simple soustraction des deux listes à l'aide de operator.sub renverrait:

list_3 = [-1, 2, -1]

Je souhaite renvoyer une autre liste_4:

list_4 = [1, 0, 3]

Ce que list_4 signifie essentiellement, c'est que si le résultat de list_3 est négatif, je prendrais la valeur de list_1. Si le résultat de list_3 est positif, je prendrais la valeur de list_2.

Par conséquent, list_4 doit renvoyer 1 (de list_1), 0 (de list_2) et 3 (de list_1) respectivement.

Je comprends que cela a probablement quelque chose à voir avec la compréhension de la liste, mais je n'arrive pas à le comprendre moi-même. J'apprécierais toute aide que je peux obtenir!

1
sunnyfunnybunny 3 juin 2020 à 18:03

4 réponses

Meilleure réponse

Compréhension de la liste:

[x if x < y else y for x,y in zip(list_1, list_2)]

Résultat:

[1, 0, 3]

Alternatives:

  • [min(x,y) for x,y in zip(list_1, list_2)]
  • [min(*e) for e in zip(list_1, list_2)]
  • import numpy as np
    np.minimum(list_1, list_2).tolist()
3
Stef 3 juin 2020 à 15:33

Cela devrait fonctionner pour vous:

list_4 = []
for i, num in enumerate(list_3):
    list_4.append(list_1[i] if element < 0 else list_2[i])
0
moe assal 3 juin 2020 à 15:18

Avec compréhension de liste.

list_4 = [i if k<0 else j for i,j,k in zip(list_1, list_2, list_3)]
0
pritam samanta 3 juin 2020 à 15:18

Ce n'est probablement pas la manière la plus pythonique. Je suppose que zéro est positif.

list_4 = []
for i, element in enumerate(list_3):
   if element < 0:
      list_4.append(list_1[i])
   else: # element >= 0
      list_4.append(list_2[i])
1
moe assal 3 juin 2020 à 15:07