如何在Python中按索引从列表中删除元素?

我找到了list.remove方法,但是说我想删除最后一个元素,该怎么做? 似乎默认的remove搜索列表,但是我不希望执行任何搜索。


#1楼

pop还可从列表中删除并保留项目。 del实际上是在哪里丢弃该项目。

>>> x = [1, 2, 3, 4]>>> p = x.pop(1)
>>> p2

#2楼

像其他提到的一样,pop和del是删除给定索引项有效方法。 只是为了完成(因为可以通过Python中的许多方法来完成同一件事):

使用切片(这并不能代替从原始列表中删除项目):

(这也是使用Python列表时效率最低的方法,但是在使用不支持pop却定义了__getitem__用户定义对象时,这可能很有用(但无效,我重申)。

>>> a = [1, 2, 3, 4, 5, 6]
>>> index = 3 # Only positive index>>> a = a[:index] + a[index+1 :]
# a is now [1, 2, 3, 5, 6]

注意:请注意,此方法不会像popdel那样就地修改列表。 相反,它制作了两个列表副本(一个从开始到索引,但没有它( a[:index] ),一个在索引之后到最后一个元素( a[index+1:] ),并创建一个新的列表对象通过添加两者。 然后将其重新分配给列表变量( a )。 因此,旧列表对象被取消引用并因此被垃圾回收(前提是原始列表对象未被a以外的任何变量引用)。

这使该方法非常低效,并且还可能产生不良的副作用(尤其是当其他变量指向未修改的原始列表对象时)。

感谢@MarkDickinson指出这一点...

该堆栈溢出答案说明了切片的概念。

另请注意,这仅适用于正指数。

与对象一起使用时,必须已定义__getitem__方法,更重要的是,必须已定义__add__方法以返回包含两个操作数中的项的对象。

本质上,这适用于类定义如下的任何对象:

class foo(object):def __init__(self, items):self.items = itemsdef __getitem__(self, index):return foo(self.items[index])def __add__(self, right):return foo( self.items + right.items )

这与定义__getitem____add__方法的list __add__使用。

三种方式的效率比较:

假设以下是预定义的:

a = range(10)
index = 3

del object[index]方法:

迄今为止最有效的方法。 所有定义__del__方法的对象都可以使用。

拆卸如下:

码:

def del_method():global aglobal indexdel a[index]

拆卸:

 10    0 LOAD_GLOBAL     0 (a)3 LOAD_GLOBAL     1 (index)6 DELETE_SUBSCR   # This is the line that deletes the item7 LOAD_CONST      0 (None)10 RETURN_VALUE
None

pop方法:

它比del方法效率低,在需要获取已删除项目时使用。

码:

def pop_method():global aglobal indexa.pop(index)

拆卸:

 17     0 LOAD_GLOBAL     0 (a)3 LOAD_ATTR       1 (pop)6 LOAD_GLOBAL     2 (index)9 CALL_FUNCTION   112 POP_TOP13 LOAD_CONST      0 (None)16 RETURN_VALUE

slice和add方法。

效率最低。

码:

def slice_method():global aglobal indexa = a[:index] + a[index+1:]

拆卸:

 24     0 LOAD_GLOBAL    0 (a)3 LOAD_GLOBAL    1 (index)6 SLICE+27 LOAD_GLOBAL    0 (a)10 LOAD_GLOBAL    1 (index)13 LOAD_CONST     1 (1)16 BINARY_ADD17 SLICE+118 BINARY_ADD19 STORE_GLOBAL   0 (a)22 LOAD_CONST     0 (None)25 RETURN_VALUE
None

注意:在所有三个反汇编中,忽略最后两行,它们基本上是return None 。 同样,前两行正在加载全局值aindex


#3楼

通常,我使用以下方法:

>>> myList = [10,20,30,40,50]
>>> rmovIndxNo = 3
>>> del myList[rmovIndxNo]
>>> myList
[10, 20, 30, 50]

#4楼

可以使用del或pop,但我更喜欢del,因为您可以指定索引和切片,从而使用户可以更好地控制数据。

例如,从显示的列表开始,可以使用del作为切片删除其最后一个元素,然后可以使用pop从结果中删除最后一个元素。

>>> l = [1,2,3,4,5]
>>> del l[-1:]
>>> l
[1, 2, 3, 4]
>>> l.pop(-1)
4
>>> l
[1, 2, 3]

#5楼

如前所述,最佳实践是del(); 或pop()如果您需要知道该值。

另一种解决方案是仅重新堆叠所需的那些元素:

    a = ['a', 'b', 'c', 'd'] def remove_element(list_,index_):clipboard = []for i in range(len(list_)):if i is not index_:clipboard.append(list_[i])return clipboardprint(remove_element(a,2))>> ['a', 'b', 'd']

eta:嗯...不适用于负索引值,会思考和更新

我想

if index_<0:index_=len(list_)+index_

会修补它...但是突然之间,这个想法似乎很脆弱。 有趣的思想实验。 似乎应该有一个“正确”的方法来执行append()/列表理解。

思考


#6楼

您可以使用del或pop来基于索引从列表中删除元素。 Pop将打印从列表中删除的成员,而列表删除该成员而不打印它。

>>> a=[1,2,3,4,5]
>>> del a[1]
>>> a
[1, 3, 4, 5]
>>> a.pop(1)3
>>> a
[1, 4, 5]
>>>

#7楼

听起来好像您不是在使用列表列表,所以我将简短说明。 您要使用pop,因为它将删除元素而不是列表元素,因此应使用del。 要调用python中的最后一个元素,它是“ -1”

>>> test = ['item1', 'item2']
>>> test.pop(-1)
'item2'
>>> test
['item1']

#8楼

您可以只搜索要删除的项目。 真的很简单。 例:

    letters = ["a", "b", "c", "d", "e"]letters.remove(letters[1])print(*letters) # Used with a * to make it unpack you don't have to (Python 3.x or newer)

输出:acde


#9楼

您可以简单地使用Python的remove函数。 像这样:

v = [1, 2, 3, 4, 5, 6]
v.remove(v[4]) # I'm removing the number with index 4 of my array
print(v) # If you want verify the process# It gave me this:
#[1,2,3,4,6]

#10楼

使用以下代码从列表中删除元素:

list = [1, 2, 3, 4]
list.remove(1)
print(list)output = [2, 3, 4]

如果要从列表中删除索引元素数据,请使用:

list = [1, 2, 3, 4]
list.remove(list[2])
print(list)
output : [1, 2, 4]

#11楼

使用“ del”功能:

del listName[-N]

例如,如果要删除最后3个项目,则代码应为:

del listName[-3:]

例如,如果要删除最后8个项目,则代码应为:

del listName[-8:]

#12楼

这取决于您要做什么。

如果要返回删除的元素,请使用pop()

>>> l = [1, 2, 3, 4, 5]
>>> l.pop(2)
3
>>> l
[1, 2, 4, 5]

但是,如果只想删除一个元素,请使用del

>>> l = [1, 2, 3, 4, 5]
>>> del l[2]
>>> l
[1, 2, 4, 5]

另外, del允许您使用切片(例如del[2:] )。


#13楼

l-值列表; 我们必须从inds2rem列表中删除索引。

l = range(20)
inds2rem = [2,5,1,7]
map(lambda x: l.pop(x), sorted(inds2rem, key = lambda x:-x))>>> l
[0, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

#14楼

通过索引从列表中删除元素的另一种方法。

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# remove the element at index 3
a[3:4] = []
# a is now [0, 1, 2, 4, 5, 6, 7, 8, 9]# remove the elements from index 3 to index 6
a[3:7] = []
# a is now [0, 1, 2, 7, 8, 9]

a [x:y]指向从索引xy-1的元素。 当我们将列表的该部分声明为空列表( [] )时,这些元素将被删除。


#15楼

如果要删除列表中的特定位置元素,例如2th,3th和7th。 你不能使用

del my_list[2]
del my_list[3]
del my_list[7]

由于删除第二个元素后,实际上删除的第三个元素是原始列表中的第四个元素。 您可以过滤原始列表中的2th,3th和7th元素并获得一个新列表,如下所示:

new list = [j for i, j in enumerate(my_list) if i not in [2, 3, 7]]

#16楼

或者,如果应删除多个索引:

print([v for i,v in enumerate(your_list) if i not in list_of_unwanted_indexes])

然后当然也可以这样做:

print([v for i,v in enumerate(your_list) if i != unwanted_index])

#17楼

已经提到了如何从列表中删除单个元素以及不同方法具有哪些优点。 但是请注意,删除多个元素可能会导致错误:

>>> l = [0,1,2,3,4,5,6,7,8,9]
>>> indices=[3,7]
>>> for i in indices:
...     del l[i]
...
>>> l
[0, 1, 2, 4, 5, 6, 7, 9]

原始列表的元素3和8(不是3和7)已被删除(因为列表在循环中被缩短了),这可能不是本意。 如果要安全删除多个索引,则应首先删除索引最高的元素,例如:

>>> l = [0,1,2,3,4,5,6,7,8,9]
>>> indices=[3,7]
>>> for i in sorted(indices, reverse=True):
...     del l[i]
...
>>> l
[0, 1, 2, 4, 5, 6, 8, 9]

#18楼

您可能想要pop

a = ['a', 'b', 'c', 'd']
a.pop(1)# now a is ['a', 'c', 'd']

默认情况下,不带任何参数的pop会删除最后一项:

a = ['a', 'b', 'c', 'd']
a.pop()# now a is ['a', 'b', 'c']

#19楼

使用del并指定要删除的元素的索引:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del a[-1]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8]

还支持切片:

>>> del a[2:4]
>>> a
[0, 1, 4, 5, 6, 7, 8, 9]

这是教程中的部分。

如何通过索引从列表中删除元素?相关推荐

  1. python列表删除指定索引元素_如何按索引从列表中删除元素?

    与其他提到的pop和del一样,是删除给定索引项的有效方法.然而,仅仅是为了完成(因为在Python中,同样的事情可以通过多种方式完成): 使用切片(这不会就地从原始列表中删除项目): (在使用Pyt ...

  2. python里删除range里的数字_python中range函数与列表中删除元素

    一.range函数使用 range(1,5)   代表从1到4(不包含5),结果为:1,2,3,4   ,默认步长为1 range(1,5,2)   结果为:1, 3  (同样不包含5) ,步长为2 ...

  3. python里面列表可以同时删除吗_在python中从列表中删除项,同时对其进行迭代

    本问题已经有最佳答案,请猛点这里访问. 我正在为锦标赛应用程序编写循环算法. 当玩家数量为奇数时,我将'DELETE'添加到玩家列表中,但稍后,当我想从包含'DELETE'的日程表列表中删除所有项目时 ...

  4. python列表批量删除元素_Python基础--list列表删除元素

    列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法: 根据元素本身的值进行删除,可使用列表(list类型)提供的 remove ...

  5. Python列表(获取列表中指定元素的索引、获取列表中的多个元素、判断指定元素是否在列表中存在、列表元素的遍历、列表元素的增加操作、 列表元素的删除操作、列表元素的修改操作、列表元素的排序操作)

    1.获取列表中指定元素的索引 eg1:未指定索引范围查找索引 zyr=['憨憨','憨宝'] print(zyr.index('憨宝')) print(zyr[1]) eg2:在指定索引范围内查找元素 ...

  6. set集合, 深浅拷贝, join, 列表和字典在循环中删除元素的问题, fromkeys( , )

    一. set集合 空集合 a = set() set集合内的元素必须可哈希(不可变), int, str, bool, tuple set3 = {'1','alex',2,True,(1,2,[2, ...

  7. Python | 程序从列表中删除范围内的所有元素

    Given a list and we have to remove elements in a range from the list in Python. 给定一个列表,我们必须从Python中的 ...

  8. python删除数组元素_python:从数组列表中删除一系列数字

    我在从数组列表中删除范围A到B的元素时遇到问题.我在网上搜索的解决方案似乎只适用于单个元素.相邻元素和或整数元素.我在处理浮点数. 1 2 3 4 5 6 7self.genx = np.arange ...

  9. python删除列表中的元素

    删除指定元素 集合.remove(元素) 删除指定索引的元素,无索引数时默认删除最后一个元素 集合.pop(索引) 清空列表中的所有元素 集合.clear() 删除指定索引的元素,本质上是用来将一个变 ...

最新文章

  1. 腾讯58篇论文入选CVPR 2019,两年增长超200%
  2. #029 博客换个主题从新开始
  3. 图的邻接矩阵简单实现Win32版本
  4. linux date 小写h,linux date 命令详解[转载]
  5. 笔记本电脑如何保养_嘉兴专业笔记本电脑喷漆加工厂价格实惠
  6. macos php无法访问,Mac上,Apache启动正常,却无法访问localhost和127.0.0.1
  7. Java DataOutputStream size()方法及示例
  8. [NOIp提高组2014]解方程
  9. S19王者荣耀服务器维护,王者荣耀:S19新赛季更新,她没上线惨遭重做,英雄调整,界面优化...
  10. 盘点Windows10系统的使用小技巧二 —— 磁贴
  11. 访谈完100个年入百万的自媒体人后,我总结了出了他们的共性
  12. 既是老师又是师兄的临别箴言 .
  13. android 7.0读写 sdcard,Android 学习笔记之SDCard读写
  14. Conky-colors详细教程
  15. webpack的面试题总结
  16. 实战:模拟登录知乎网站(添加cookie)
  17. c语言程序设计数组实验报告,c语言程序设计实验报告(数组).doc
  18. 给定一个层数n,输出字母三角形
  19. 2000-2021年各省GDP包括名义GDP、实际GDP、GDP平减指数(以2000年为基期)
  20. android ftp客户端

热门文章

  1. 卸载linux订阅包
  2. 从零开始学android开发-创建第一个android项目
  3. 使用Ext.grid.Panel生成表格
  4. 常用CASE工具介绍
  5. Spring scope属性详解
  6. php yii框架使用MongoDb
  7. java设计模式(五)--建造者模式(Builder)
  8. Java并发编程 ReentrantLock 源码分析
  9. 查看google chrome版本号及浏览器驱动下载
  10. CentOS 8源码安装Zabbix5.0