J'ai 2 listes:
a=[45, 41, 42, 43, 44]
b=[41, 42, 43, -44, -45]
Je veux trier b
en fonction de a
sans le signe négatif, donc après le resort ça devrait être comme:
a=[45, 41, 42, 43, 44]
b=[-45, 41, 42, 43, -44]
J'ai essayé de comparer des éléments mais je fais face à un problème en signe négatif
Merci
3 réponses
>>> sorted(b, key=lambda x: a.index(abs(x)))
[-45, 41, 42, 43, -44]
Ou si vous voulez trier b
à sa place
b.sort(key=lambda x: a.index(abs(x)))
Vous pouvez utiliser abs
pour la valeur absolue.
>>> sorted(map(abs,b),reverse=True)
[45, 44, 43, 42, 41]
La réponse ci-dessus est élégante et concise.
Cependant, si vous travaillez sur des listes plus importantes, vous pouvez envisager d'utiliser un dictionnaire de positions pour empêcher les appels à l'indexation.
La complexité resterait à O (n log n) vs O (n ^ 2 log n)
a=[45, 41, 42, 43, 44]
b=[41, 42, 43, -44, -45]
# populate dictionary to reduce number of array scans
keys = {}
for x in xrange(len(a)):
keys[a[x]] = x
# key is position in a, or -1
def key(x):
x = abs(x)
if x in keys:
return keys[x]
return -1
b.sort(key = key)
print b
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.