如何在python中将列表中的元素移到末尾

2024-03-29 05:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为values的字符串列表,我想让列表中的一个元素成为最后一个元素。例如,如果我有字符串:

['string1', 'string2', 'string3']

我希望string2是最后一个元素:

['string1', 'string3', 'string2']

当我的列表不包含string2时,也可能有一个实例。有什么简单的方法可以做到这一点吗?到目前为止,我所拥有的是:

if 'string2' in values:
    for i in values:
        #remove string2 and append to end

Tags: and实例方法字符串in元素列表for
3条回答

sort是此操作的O(n),因此它的时间复杂度与没有2或3个函数查找的另一个答案相同。如果“string2”不在列表中,则没有错误

>>> lst = ['string1', 'string2', 'string3']
>>> lst.sort(key='string2'.__eq__)
>>> lst
['string1', 'string3', 'string2']

您可以使用相同的技巧将所有“string2”移动到列表的末尾。或者更一般地说是一个完整的类别,例如将从string开始的所有内容移动到列表的末尾:

lst.sort(key=lambda s:s.startswith('string'))

~Timsort认为这是一个最大值为3“运行”,Timsort是一个稳定的排序

>>> lst = ['string1', 'string2', 'string3']
>>> lst.append(lst.pop(lst.index('string2')))
>>> lst
['string1', 'string3', 'string2']

我们寻找'string2'的索引,从列表中弹出该索引,然后将其附加到列表中。

也许一种更为无异常的方法是首先将您要查找的内容添加到列表的末尾(毕竟,您可能已经知道它是什么)。然后从列表中删除该字符串的第一个实例:

>>> lst = ['string1', 'string2', 'string3']
>>> lst.append('string2')
>>> del lst[lst.index('string2')]  # Equivalent to lst.remove('string2')
>>> lst
['string1', 'string3', 'string2']
lst = ['string1', 'string2', 'string3']
lst.append('string2')
lst.remove('string2')     # -> ['string1', 'string3', 'string2']

(mgilson提出了一个很好的观点——如果你先将值添加到列表中,那么总会有一个要删除)

相关问题 更多 >