重新排列列表中的元素

Caj*_*uu' 1 python python-3.x

我有一个包含一些项目的列表.我想按如下方式重新排列它们:

  • product_name 应该是第一个元素
  • items图像开始应该是最后一个(也应该排序)
  • 其余的项目应该介于两者之间,没有特别的顺序.

杂项:product_name我的列表中只有一个(并且总是一个),里面的项目没有特定的顺序排列(也就是说,项目的顺序是随机的 - 我只举了一个例子).此外,该列表包含唯一items.

以下是它的工作,但似乎有点冗长和低效.我确信有一种方法可以在单个for循环中执行此操作,但我现在有一个脑筋.是否有更简单的方法来实现以下目标?

def rearrange(header):
    final = ['product_name']
    images = sorted([item for item in header if item.startswith('image')])

    for item in header:
        if item != 'product_name' and not item.startswith('image'):
            final.append(item)

    final += images
    return final


header = [
    'word2',
    'image_4',
    'word1',
    'product_name',
    'image_3',
    'image_1',
    'image_5',
    'word3',
    'image_6',
    'image_2',
]

print(rearrange(header))
Run Code Online (Sandbox Code Playgroud)

结果:

['product_name', 'word2', 'word1', 'word3', 'image_1', 'image_2', 'image_3', 'image_4', 'image_5', 'image_6']
Run Code Online (Sandbox Code Playgroud)

Pau*_*zer 5

您可以使用内置的key关键字sorted:

 sorted(header, key=lambda x: (x.startswith('image') + (x != 'product_name'), x))
Run Code Online (Sandbox Code Playgroud)

结果:

['product_name', 'word1', 'word2', 'word3', 'image_1', 'image_2', 'image_3', 'image_4', 'image_5', 'image_6']
Run Code Online (Sandbox Code Playgroud)