繁体   English   中英

如何以升序方式对字符串列表进行排序?

[英]How to sort list of string in ascending way?

我有一个字符串列表。 它们实际上是文件。

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)但失败了。

尝试这个,

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

['1.jpg', '2.jpg', '3.jpg', '4.jpg', ..]

这可以通过多种方式完成。 但是我制作的代码我尝试使其尽可能详细和概念化num 值,然后第二部分按 asc 顺序对其进行排序,然后第三部分带来整个文件并创建一个新列表。我还添加了一个可以接受重复值而不会出现任何错误的功能,我还在 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)

output 是:

['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

这适用于任何格式,初学者也很容易理解。

希望这可以帮助你

按编号排序:

import os

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

您还可以对文件名进行零填充以帮助进行排序。

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)

尝试这个。

使用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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM