python - 对列表进行排序,其中某些值保持在固定位置

标签 python algorithm python-3.x sorting

我有一个字符串列表。我只想对满足特定条件的值进行排序。考虑这个列表

['foo','bar','testa','python','java','abc']

我只想对其中包含 a 的值进行排序。结果应该是这样的

['foo','abc','bar','python','java','testa']

带有a的元素会适当改变位置,但其他元素保持原来的位置。

我完全不知道如何实现它,所以我希望其他人能做到。谁能告诉我怎么做?

最佳答案

y = sorted(w for w in x if 'a' in w)  # pick and sort only the elements with 'a'
x = [w if 'a' not in w else y.pop(0) for w in x]

最后一行保留没有 'a' 的单词不变,而那些带有 'a' 的单词从 y 列表中逐步挑选(已经排序)

编辑: @MartijnPieters 解决方案性能更好,因为它使用迭代器并且不会使用额外的内存来存储 y

y = iter(sorted(w for w in x if 'a' in w))  # create iterator, don't use memory
x = [w if 'a' not in w else next(y) for w in x]  # yield from iter instead of popping from a list

因为看起来你需要这个算法来处理不同的条件,你可以把它放到一个方法中:

x = ['foo','bar','testa','python','java','abc']

def conditional_sort(ls, f):
    y = iter(sorted(w for w in ls if f(w)))
    return [w if not f(w) else next(y) for w in ls]

conditional_sort(x, lambda w: 'a' in w)

第一个参数是列表,第二个参数是一个函数,它接受一个参数并返回一个 bool 值。

关于python - 对列表进行排序,其中某些值保持在固定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45382174/

相关文章:

c - 插入排序数组

algorithm - 不使用递归重写递归函数

c++ - N Boost interval_set 的组合

python - 过滤字典列表的最快方法?

python - 加速 Pandas 通过请求申请 API 调用

python - 将元组的无序列表转换为 pandas DataFrame

python - 切片正在向我的阵列添加第三维 - 不知道为什么

Python:在乌龟中一次使用多种颜色

python - 在矩阵中查找邻居?

python 将重复项合并到一个列表中并合并结果