我有一个字符串列表。我只想对符合特定条件的值进行排序。考虑这个清单
['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] 删除。
我来说两句