Список сортировки с правилами с python - PullRequest
0 голосов
/ 29 мая 2020

У меня есть такой список

['File3', 'File007', 'File3a', 'File10', 'File11', 'File1', 'File4', 'File5', 'File9', 'File8', 'File8b1', 'File8b2', 'File8b11', 'File6']

Когда я сортирую его с помощью sorted() в python. он станет таким:

['File007', 'File1', 'File10', 'File11', 'File3', 'File3a', 'File4', 'File5', 'File6', 'File8', 'File8b1', 'File8b11', 'File8b2', 'File9']

Но то, что я хочу, это:

['File1', 'File3', 'File3a', 'File4', 'File5', 'File6', 'File007', 'File8', 'File8b1', 'File8b2', 'File8b11', 'File9', 'File10', 'File11']

Сортировка номера должна быть: File1, File2, File3, File10

не как: File1, File10, File2, File3

, если он имеет 0 di git, как этот File007, он будет считаться 7

, если у него есть алфавит после номера, например File3a, он будет отсортировать так: File3, File3a, File3b, ...

есть ли способы добавить эти правила при сортировке списка?

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Существует способ определить свои собственные правила сортировки, передав аргумент ключевого слова key функции sorted. Некоторый код, который, кажется, делает именно то, что вы хотите, может выглядеть так:

import re

def key_fn(f):
    # the f[4:] part just gets the part of each string after 'File'
    groups = re.match(r'(\d*)(\D*)(\d*)', f[4:]).groups()
    def try_parse_int(x):
        # x should be either an empty string or something we can
        # parse into an int
        try:
            return int(x)
        except ValueError:
            return None
    return try_parse_int(groups[0]), groups[1], try_parse_int(groups[2])

files = ['File3','File007','File3a','File10','File11','File1','File4','File5',
    'File9','File8','File8b1','File8b2','File8b11','File6']

sorted_files = sorted(files, key=key_fn)

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

0 голосов
/ 29 мая 2020

Да, вы можете использовать функцию, которая запускается в процессе сортировки

# Sort a list based on removing leading zeros
def mysort(x): 
    return int(str(x).replace("0",""))

L = ["002", "013", "001", "005"] 

print ("Normal sorting :", sorted(L)) 
print ("Sorted with key:", sorted(L, key = mysort)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...