如何在 python 中对图像序列(具有不同的扩展名)进行排序



>我有这个:

list = ["0001.exr", "0003.exr", "0002.dpx", "0001.dpx", "0002.exr", "0003.dpx"]
list.sort()
for line in list:
    print (line)

它返回的是:

0001.dpx

0001.exr

0002.dpx

0002.exr

0003.dpx

0003.exr

如何返回此结果?(以一种简单的方式)

0001.dpx

0002.dpx

0003.dpx

0001.exr

0002.exr

0003.exr

只需使用一个键来.sort(),将"."之后的内容比之前的内容更重要:

list.sort(key=lambda l: "".join(reversed(l.split(".")))

根据名称进行排序,然后使用 OS 库获取扩展并根据它进行排序(作为键):

list.sort()
list.sort(key=lambda list_item: os.path.splitext(list_item)[-1])

您可以将内置的sorted()函数与名为sort的自定义cmp函数一起使用:

l = ["0001.exr", "0003.exr", "0002.dpx", "0001.dpx", "0002.exr", "0003.dpx"]
def sort(a, b):
    if 'dpx' in a and 'exr' in b:
        return -1
    if float(a.split('.')[0]) < float(b.split('.')[0]):
        return -1
    return 1
answer = sorted(l, cmp=sort)
print(answer)

输出

['0001.dpx', '0002.dpx', '0003.dpx', '0001.exr', '0002.exr', '0003.exr']

顺便说一句,您不应该通过使用list作为变量名称来屏蔽内置list()函数。

list = ["0001.exr", "0003.exr", "0002.dpx", "0001.dpx", "0002.exr", "0003.dpx"]
lst_tuple=[]
for item in list:
  lst_tuple.append((item.split('.')[0],item.split('.')[1]))

print sorted(lst_tuple, key=lambda element: (element[1], element[0]))

最新更新