Python - сортировка списка списков - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть список в этом формате:

exon_start exon_finish имя_гена (повторяется сотни раз)

Я хочу отсортировать по exon_start

Пример списка:

 ['8342758', '8344137', 'NM_001042682']
 ['85420368', '85421471', 'NM_032184']
 ['86363115', '86364485', 'NM_152890']
 ['89820771', '89822936', 'NM_015350']
 ['904123', '905900', 'NR_027693']
 ['91176416', '91179454', 'NM_201269']
 ['92418409', '92420740', 'NM_015237']
 ['93575521', '93577419', 'NR_034089']
 ['94114411', '94116006', 'NM_014597']
 ['99926918', '99928016', 'NM_017734']

Этот список списков (напечатанный выше) уже отсортирован с использованием следующего кода:

sorted_triplets = sorted(triplets, key=lambda x: x[0])
for i in sorted_triplets:
    print i

Однако «отсортировано» не работает, как я ожидал.Как видно из списка, 904123 меньше, чем 89820771. Таким образом, похоже, что «отсортированные» сравнивают не числа в целом, а отдельные цифры.

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

Ответы [ 6 ]

4 голосов
/ 22 апреля 2011

Он сортирует их как строки, поэтому порядок «в алфавитном порядке».Иными словами, он будет проходить символ за символом и сравнивать, а не сравнивать их как скалярные значения.

Так же:

sorted_triplets = sorted(triplets, key=lambda x: int(x[0]))

И это должно работать.

1 голос
/ 22 апреля 2011

преобразовать строки в числа

sorted(triplets, key=lambda x: int(x[0]))
0 голосов
/ 22 апреля 2011

Добавить вызов int ().

sorted_triplets = sorted(triplets, key=lambda x: int(x[0]))
0 голосов
/ 22 апреля 2011

Кажется, что ваше "число" на самом деле строка. Преобразуйте эту строку в целое число (int (string)), тогда сортировка должна работать

0 голосов
/ 22 апреля 2011

Правильно, потому что у вас есть строки, а не числа.Это будет отсортировано лексикографически.Вы можете сначала преобразовать их в числа (целые числа).

0 голосов
/ 22 апреля 2011

Преобразовать exon_start в целое число, строки отсортированы лексикографически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...