我有一组包含一组元素的数组。我想把一个给定的元素带到前面,否则保持顺序不变。人们对这个最干净的语法有什么建议吗?
这是我能够提出的最好的,但是当N操作可以执行N log N操作时似乎是不好的形式。
mylist = sorted(mylist,
key=lambda x: x == targetvalue,
reverse=True)
干杯, / YGA
答案 0 :(得分:89)
我会选择:
mylist.insert(0, mylist.pop(mylist.index(targetvalue)))
答案 1 :(得分:26)
要将第5个元素(例如)带到前面,请使用:
mylist.insert(0, mylist.pop(5))
答案 2 :(得分:14)
这只需要两个列表操作(无索引):
mylist.remove(targetvalue)
mylist.insert(0, targetvalue)
答案 3 :(得分:1)
注意:以下代码(以及您提供的示例代码)将在前面放置所有匹配元素。
x = targetvalue
for i in range(len(mylist)):
if(mylist[i] == x):
mylist = [mylist[i]] + mylist[:i] + mylist[i+1:]
例如,如果mylist = [1,2,3,4,3]和x = 3,则会产生[3,3,1,2,4]。
答案 4 :(得分:1)
使用插入设计技术(与Mike建议的完全相同):
def move-to-front(key, mylist):
for i in range(len(mylist[:mylist.index(key)]), -1, -1):
mylist[i] = mylist[i - 1]
mylist[0] = key