我有一个名为pop_item()的函数,我试图让它像pop()一样与list类一起工作,我该怎么做呢?下面是我的代码:定义为空(第一次):返回列表== []
def pop_item(lst):
lst = lst[::-1]
new_lst = []
for i in lst:
if i != lst[-1]:
new_lst += [i]
lst = new_lst
return lst
def main():
todo = [1,2,3,4]
print(todo) #prints [1,2,3,4] as expected
print('\n' + 75 * '_' + '\n')
print(pop_item(todo)) #pop the item off
print(todo) #output should then be [1,2,3]
if __name__ == '__main__':
main()
注意:我不允许使用任何内置函数,如len(),index,del()等。
3条答案
按热度按时间ttcibm8c1#
比列表组件和宽切片效率更高的是使用单个条目切片赋值:
lst[index:index+1 or None] = ()
等价于del lst[index]
,除了从不抛出异常;幸运的是,前一行的索引操作将为我们抛出异常。del
版本本质上是list.pop
的实现方式,它分摊了O(1)
的工作(当index
是默认的-1
时),以及当从list
中的其他位置弹出时执行单个O(n)
操作(与分片和列表组件相反,无论从何处弹出,分片和列表组件都涉及多个O(n)
浅拷贝操作)。您的原始代码与
list.pop
的不同之处在于:1.它是根据值而不是索引删除的
1.它可以删除多个项目,而不仅仅是一个
1.它毫无理由地颠倒了输入
1.它保持输入不变,而不是从调用者的
list
中删除一个项1.它返回输入
list
的变异副本,而不是弹出的项替代品没有这些问题,并且与
list.pop
的行为基本相同。plupiseo2#
下面是不使用
list
函数,只使用切片和列表解析从列表中弹出项的一些变体使用slicing & slicing赋值弹出最后一项:
通过重建列表弹出一个有值项(最后一个,但可以是参数)& slice assign
(that可以弹出列表中具有相同值的其他项)
通过指定列表中的项目位置/索引:
1dkrff033#