Подтвердить что ты не робот

Как отсортировать список в Python?

Что такое Pythonic для сортировки zip-списка?

код:

names = list('datx')
vals  = reversed(list(xrange(len(names))))
zipped = zip(names, vals)

print zipped

Вышеприведенный код печатает [('d', 3), ('a', 2), ('t', 1), ('x', 0)]

Я хочу сортировать zipped по значениям. В идеале это выглядит так: [('x', 0), ('t', 1), ('a', 2), ('d', 3)].

4b9b3361

Ответ 1

zipped.sort(key = lambda t: t[1])

Ответ 2

Довольно просто:

sorted(zipped, key=lambda x: x[1])

Ответ 3

import operator
sorted(zipped, key=operator.itemgetter(1))

Если вы хотите немного быстрее, сделайте ig = operator.itemgetter(1) и используйте ig как ключевую функцию.

Ответ 4

Это проще и эффективнее застегивать их по порядку в первую очередь (если можно). Учитывая ваш пример, это довольно легко:

>>> names = 'datx'
>>> zip(reversed(names), xrange(len(names)))
<<< [('x', 0), ('t', 1), ('a', 2), ('d', 3)]

Ответ 5

В вашем случае вам не нужно сортировать вообще, потому что вы просто хотите перечислить перевернутый список вашего names:

>>> list(enumerate(names[::-1]))      # reverse by slicing
[(0, 'x'), (1, 't'), (2, 'a'), (3, 'd')]

>>> list(enumerate(reversed(names)))  # but reversed is also possible
[(0, 'x'), (1, 't'), (2, 'a'), (3, 'd')]

Но если вам нужно отсортировать его, вы должны использовать sorted (как предоставлено @utdemir или @Ulrich Dangel), потому что он будет работать на Python2 (zip и itertools.zip) и Python3 (zip) и не будет терпеть неудачу с AttributeError как .sort(...) (который работает только на Python2 zip, потому что там zip возвращает list):

>>> # Fails with Python 3 zip:
>>> zipped = zip(names, vals)
>>> zipped.sort(lambda x: x[1])
AttributeError: 'zip' object has no attribute 'sort'

>>> # Fails with Python 2 itertools izip:
>>> from itertools import izip
>>> zipped = izip(names, vals)
>>> zipped.sort(lambda x: x[1])
AttributeError: 'itertools.izip' object has no attribute 'sort'

Но sorted работает в каждом случае:

>>> zipped = izip(names, vals)
>>> sorted(zipped, key=lambda x: x[1])
[('x', 0), ('t', 1), ('a', 2), ('d', 3)]

>>> zipped = zip(names, vals)  # python 3
>>> sorted(zipped, key=lambda x: x[1])
[('x', 0), ('t', 1), ('a', 2), ('d', 3)]