You need to enable JavaScript to run this app. Python 中如何通过元素操作实现列表相同值相邻排列
优惠活动
大模型
产品
解决方案
定价
更多

Python 中如何通过元素操作实现列表相同值相邻排列

Python 列表同值元素相邻排列的实现方案

列表存在重复元素时,要让同值元素达成相邻排列的效果,可根据实际开发场景选择以下实现方式:

方案1:内置排序快速实现

只要列表元素支持比较操作,这是最简洁的实现路径,直接调用列表原生排序方法即可达成同值元素相邻的效果:

l = ['a','b','c','a','b','c']
l.sort()
print(l)  # 输出结果:['a', 'a', 'b', 'b', 'c', 'c']

注意:如果列表元素为自定义对象、或混合了无法直接比较的类型,内置排序会触发类型错误,这类场景请选择下面的非排序实现方案。

方案2:基于原地交换的归组实现

如果开发场景要求不能新建列表、只能通过元素交换调整原列表的位置,可先统计每个元素的出现频次,再按连续区间逐位置交换归位,完全匹配题目提到的交换操作要求:

from collections import Counter

def group_in_place(lst):
    # 统计每个元素的出现次数
    element_count = Counter(lst)
    cursor = 0
    # 为每个元素分配连续的存放区间
    for val, total in element_count.items():
        interval_start = cursor
        interval_end = cursor + total
        # 遍历区间内的每个位置,将匹配元素交换到位
        for idx in range(interval_start, interval_end):
            if lst[idx] != val:
                # 向后查找目标值完成交换
                swap_pos = idx + 1
                while lst[swap_pos] != val:
                    swap_pos += 1
                lst[idx], lst[swap_pos] = lst[swap_pos], lst[idx]
        cursor = interval_end
    return lst

# 测试调用
l = ['a','b','c','a','b','c']
print(group_in_place(l))  # 输出结果:['a', 'a', 'b', 'b', 'c', 'c']

方案3:计数展开生成新列表

如果允许生成新的列表对象,这种方法的执行效率最高,不需要复杂的位置查找和交换逻辑:

from collections import Counter

l = ['a','b','c','a','b','c']
count_result = Counter(l)
grouped_list = [val for val, count in count_result.items() for _ in range(count)]
print(grouped_list)  # 输出结果:['a', 'a', 'b', 'b', 'c', 'c']

补充说明:以上所有方案默认按照元素本身的排序/首次出现顺序安排相邻组的先后位置,如果对组的顺序有自定义要求,只需要调整遍历计数结果的顺序即可。


内容的提问来源于stack exchange,提问作者Ram dr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 12:54:03