对某些值保持不变的列表进行排序

开斋节

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

['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值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章