Skip to main content
 首页 » 编程设计

python之重新排列列表中的元素

2025年05月04日14bluestorm

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

  • product_name 应该是第一个元素
  • items 以 image 开头的应该是最后一个(同时,它们应该被排序)
  • 其余项目应介于两者之间,无特定顺序。

Misc:我的列表中只有一个(并且总是一个)product_name,其中的项目没有特定顺序排列(也就是说,项目的顺序是随机的——我只是举了一个例子)。此外,该列表包含独特的项目。

下面的代码完成了它的工作,但它似乎有点冗长且效率低下。我确信有一种方法可以在单个 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)) 

结果:

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

请您参考如下方法:

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

 sorted(header, key=lambda x: (x.startswith('image') + (x != 'product_name'), x)) 

结果:

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