【发布时间】:2016-03-06 06:04:45
【问题描述】:
我的任务是删除一个特定元素的所有实例(本例中为“6”)并将它们移到列表的末尾。要求是遍历列表进行内联更改(不创建补充列表)。
输入示例:[6,4,6,2,3,6,9,6,1,6,5] 输出示例:[4,2,3,9,1,5,6,6,6,6,6]
到目前为止,我只能通过制作补充列表(打破任务要求)来做到这一点,因此不允许使用此工作代码:
def shift_sixes(nums):
b = []
c = 0
d = []
for i in nums:
if i == 6:
b.insert(len(nums),i)
elif i != 6:
c = c +1
d.insert(c,i)
ans = d + b
return ans
我也尝试过list.remove() 和list.insert(),但遇到了索引问题(当我insert() 然后将元素移动到末尾时它会移动):例如 -
a = [6,4,6,2,3,6,9,6,1,6,5]
def shift_sixes(nums):
for i in nums:
if i == 6:
nums.remove(i)
nums.insert(nums[len(nums)-1], 0)
elif i != 0:
i
shift_sixes(a)
另外,我尝试如下使用 enumerate() 函数,但在 b[idx] 赋值行的右侧遇到了问题:
for idx, b in enumerate(a):
a[idx] = ???
已阅读其他 stackoverflow 条目 here、here 和 here,但它们没有解决元素向一端移动的问题。
对于此列表遍历/就地切换问题的任何帮助,我们将不胜感激。非常感谢。
编辑 @eph - 谢谢。这确实是一个优雅的回应。我确定它会通过我的“无新列表”要求吗?我肯定打算更多地了解 lambda 及其用途 @falsetru - 感谢您提醒附加/弹出组合(我试图在我的原始查询中通过 list.remove() 和 list.insert() @tdelaney - 也谢谢你。不知何故,您的回答最接近我的尝试,但似乎没有通过 [0, 0, 5] 的测试。
【问题讨论】:
-
对于就地替换选项的时序比较,请查看answer
标签: python list python-3.x