Какой стандартный способ сделать это в Python? - PullRequest
5 голосов
/ 24 июня 2011

Представьте, что у меня есть список кортежей в этом формате:

(1, 2, 3)
(1, 0, 2)
(3, 9 , 11)
(0, 2, 8)
(2, 3, 4)
(2, 4, 5)
(2, 7, 8)
....

Как можно отсортировать список по первому элементу кортежей, а затем по второму?Я хотел бы попасть в этот список:

(0, 2, 8)
(1, 0, 2)
(1, 2, 3)
(2, 3, 4)
(2, 4, 5)
(2, 7, 8)
(3, 9 , 11)

Я думал сделать сортировку для первого элемента, а затем пройтись по списку и создать хеш с подрешетками.Я, вероятно, усложню вещи :), и поэтому я попросил другие способы сделать это.

Ответы [ 5 ]

8 голосов
/ 24 июня 2011

Почему бы просто не позволить Python отсортировать список для вас?

my_list = [
(1, 2, 3),
(1, 0, 2),
(3, 9 , 11),
(0, 2, 8),
(2, 3, 4),
(2, 4, 5),
(2, 7, 8),
]

print sorted(my_list)
>>>[(0, 2, 8), (1, 0, 2), (1, 2, 3), (2, 3, 4), (2, 4, 5), (2, 7, 8), (3, 9, 11)]
3 голосов
/ 24 июня 2011

Python автоматически делает правильные вещи:

>>> a = [(1, 2, 3), (1, 0, 2), (3, 9, 11), (0, 2, 8), (2, 3, 4), (2, 4, 5), (2, 7, 8)]
>>> a.sort()
>>> a
[(0, 2, 8), (1, 0, 2), (1, 2, 3), (2, 3, 4), (2, 4, 5), (2, 7, 8), (3, 9, 11)]
1 голос
/ 24 июня 2011

Кортежи уже отсортированы таким образом.

Попробуйте это:

#!/usr/bin/python2
l = [
  (1, 2, 3),
  (1, 0, 2),
  (3, 9 , 11),
  (0, 2, 8),
  (2, 3, 4),
  (2, 4, 5),
  (2, 7, 8),
]

l.sort()
print l
0 голосов
/ 24 июня 2011
>>> x = [
...   (1, 2, 3),
...   (1, 0, 2),
...   (3, 9 , 11),
...   (0, 2, 8),
...   (2, 3, 4),
...   (2, 4, 5),
...   (2, 7, 8),
... ]
>>> x.sort()
>>> x
[(0, 2, 8), (1, 0, 2), (1, 2, 3), (2, 3, 4), (2, 4, 5), (2, 7, 8), (3, 9, 11)]
0 голосов
/ 24 июня 2011

Если вы не возражаете против сортировки по всем трем элементам, это действительно тривиально:

>>> l = [(1, 2, 3), (1, 0, 2), (3, 9, 11), (0, 2, 8), (2, 3, 4), (2, 4, 5), (2, 7, 8)]
>>> l.sort()
>>> l
[(0, 2, 8), (1, 0, 2), (1, 2, 3), (2, 3, 4), (2, 4, 5), (2, 7, 8), (3, 9, 11)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...