Как отсортировать список строк по возрастанию? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть список строк. На самом деле это файлы.

image_files = ["1.jpg", "3.jpg", "2.jpg", "4.jpg", "6.jpg", "5.jpg", "20.jpg", "29.jpg", "11.jpg", "9.jpg"]

Я хочу отсортировать их так:

['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '9.jpg', '11.jpg', '20.jpg', '29.jpg']

Я пробовал с sorted(image_files, key = len), но не удалось.

Ответы [ 5 ]

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

Это можно сделать разными способами. Но код, который я сделал, я попытался сделать его как можно более подробным и концептуальным. Я попытался разбить каждую часть на множество частей, что можно сделать легко, но чтобы усложнить понимание зрителя, я разбил код на 3 части, первая часть берет на себя все num, затем вторая часть сортирует его в порядке c, затем третья часть приносит весь файл и создает новый список. я также добавил функцию, которая будет принимать повторяющиеся значения без каких-либо ошибок. Я также добавил новые элементы в image_list для лучшего понимания зритель.

    image_files = ["1.jpg", "3.jpg", "2.jpg", "4.jpg", "6.jpg", "5.jpg", "20.jpg", "29.jpg", "11.jpg", "9.jpg","5.img","6.img","100.png","20.jpg"]
    name_of_folder_list = [] #list of ints in the fine name
    for i in image_files:
        num = i.split('.')[0]
        name_of_folder_list.append(int(num))
    asc_name_of_folder_list = sorted(name_of_folder_list, reverse=False)#sorting the number list in ascending order
    output_list = []
    for i in asc_name_of_folder_list:
        for j in image_files:
            if int(j.split('.')[0]) == int(i):
                output_list.append(j)#this will add the item to new list
                image_files.remove(j)#this will remove from old list avoiding double values of duplicates

            else:
                pass

print(output_list)

вывод:

['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '5.img', '6.jpg', '6.img', '9.jpg', '11.jpg', '20.jpg', '20.jpg', '29.jpg', '100.png']

Process finished with exit code 0

Это работает с любым форматом и легко понимается новичками.

Надеюсь, это поможет вам

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

попробуйте это,

sorted(image_files, key=lambda x : int(x.split(".")[0]))

['1.jpg', '2.jpg', '3.jpg', '4.jpg', ..]
1 голос
/ 29 мая 2020
image_files = ["1.jpg", "3.jpg", "2.jpg", "4.jpg", "6.jpg", "5.jpg", "20.jpg", "29.jpg", "11.jpg", "9.jpg"]

image_files.sort(key=lambda item: (len(item), item))

print(image_files)

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

1 голос
/ 29 мая 2020

Сортировать по номеру:

import os

sorted_files = sorted(image_files, key=lambda x: int(os.path.splitext(x)[0]))

Вы также можете заполнить свои имена файлов нулями, чтобы облегчить сортировку.

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

Использование метода list.sort () для решения этой

image_files = ["1.jpg", "3.jpg", "2.jpg", "4.jpg", "6.jpg", "5.jpg", "20.jpg", "29.jpg", "11.jpg", "9.jpg"]
image_files.sort(key=lambda x : int(x.split('.')[0]))
print(image_files)
#['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '9.jpg', '11.jpg', '20.jpg', '29.jpg']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...