сортировать текстовый список по элементам - PullRequest
0 голосов
/ 30 апреля 2020

У меня проблема со списком .txt, список содержит следующее:

Numero de permutaciones de la forma (2,4,3) = 1260
Numero de permutaciones de la forma (7,2,0) = 36
Numero de permutaciones de la forma (5,3,1) = 504
Numero de permutaciones de la forma (4,5,0) = 126
Numero de permutaciones de la forma (1,8,0) = 9
Numero de permutaciones de la forma (0,7,2) = 36
Numero de permutaciones de la forma (0,6,3) = 84
...

Мой код такой:

with open('resultado_lista_original2.txt', 'r') as r:
    for line in sorted(r):
        print(line,end='')

, но мне нужно отсортировать этот список по элемент рядом с правым "=", чтобы получить этот заказ

Numero de permutaciones de la forma (1,8,0) = 9
Numero de permutaciones de la forma (0,7,2) = 36
Numero de permutaciones de la forma (7,2,0) = 36
Numero de permutaciones de la forma (0,6,3) = 84
Numero de permutaciones de la forma (4,5,0) = 126
Numero de permutaciones de la forma (5,3,1) = 504
Numero de permutaciones de la forma (2,4,3) = 1260
...

Я очень ценю, кто может мне помочь / направить меня

Ответы [ 4 ]

3 голосов
/ 30 апреля 2020

Передайте аргумент key, чтобы решить, как сортировать вашу итерацию. Большинство людей делают это с помощью лямбда-функции:

for line in sorted(r, key=lambda x: int(x.split('=')[1])):

Или, если вы предпочитаете определять функцию самостоятельно:

def sort_my_txt_lines(line):
    digits_after_equal_sign = line.split('=')[1]
    return int(digits_after_equal_sign)

# ...
    for line in sorted(r, key=sort_my_txt_lines):

Если вы не привыкли думать о сортировке с помощью * Функция 1008 *, подумайте об этом так: при попытке отсортировать входную последовательность, смотрите только на числовую часть за знаком = (возвращаемое значение функции) каждой строки (входной параметр функции).

1 голос
/ 30 апреля 2020

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

import re
with open("input.txt")as f:
  s = sorted(f, key=lambda x:int(re.search(r"(\d+)$", x).group(1)))

Демо

1 голос
/ 30 апреля 2020

Метод sorted имеет ключ атрибута, в который вы можете поместить лямбду или метод, который будет вызываться с каждым элементом списка, который вы хотите отсортировать.

Результат этого будет использован для сортировки списка вместо самого элемента.

0 голосов
/ 30 апреля 2020

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

    for line in sorted(r, key=lambda x: int(x.split(' = ').strip())):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...