如何通过索引从列表中删除元素?
如何在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]
注意:请注意,此方法不会像pop
和del
那样就地修改列表。 相反,它制作了两个列表副本(一个从开始到索引,但没有它( 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
。 同样,前两行正在加载全局值a
和index
。
#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]指向从索引x
到y-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]
这是教程中的部分。
如何通过索引从列表中删除元素?相关推荐
- python列表删除指定索引元素_如何按索引从列表中删除元素?
与其他提到的pop和del一样,是删除给定索引项的有效方法.然而,仅仅是为了完成(因为在Python中,同样的事情可以通过多种方式完成): 使用切片(这不会就地从原始列表中删除项目): (在使用Pyt ...
- python里删除range里的数字_python中range函数与列表中删除元素
一.range函数使用 range(1,5) 代表从1到4(不包含5),结果为:1,2,3,4 ,默认步长为1 range(1,5,2) 结果为:1, 3 (同样不包含5) ,步长为2 ...
- python里面列表可以同时删除吗_在python中从列表中删除项,同时对其进行迭代
本问题已经有最佳答案,请猛点这里访问. 我正在为锦标赛应用程序编写循环算法. 当玩家数量为奇数时,我将'DELETE'添加到玩家列表中,但稍后,当我想从包含'DELETE'的日程表列表中删除所有项目时 ...
- python列表批量删除元素_Python基础--list列表删除元素
列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法: 根据元素本身的值进行删除,可使用列表(list类型)提供的 remove ...
- Python列表(获取列表中指定元素的索引、获取列表中的多个元素、判断指定元素是否在列表中存在、列表元素的遍历、列表元素的增加操作、 列表元素的删除操作、列表元素的修改操作、列表元素的排序操作)
1.获取列表中指定元素的索引 eg1:未指定索引范围查找索引 zyr=['憨憨','憨宝'] print(zyr.index('憨宝')) print(zyr[1]) eg2:在指定索引范围内查找元素 ...
- set集合, 深浅拷贝, join, 列表和字典在循环中删除元素的问题, fromkeys( , )
一. set集合 空集合 a = set() set集合内的元素必须可哈希(不可变), int, str, bool, tuple set3 = {'1','alex',2,True,(1,2,[2, ...
- Python | 程序从列表中删除范围内的所有元素
Given a list and we have to remove elements in a range from the list in Python. 给定一个列表,我们必须从Python中的 ...
- python删除数组元素_python:从数组列表中删除一系列数字
我在从数组列表中删除范围A到B的元素时遇到问题.我在网上搜索的解决方案似乎只适用于单个元素.相邻元素和或整数元素.我在处理浮点数. 1 2 3 4 5 6 7self.genx = np.arange ...
- python删除列表中的元素
删除指定元素 集合.remove(元素) 删除指定索引的元素,无索引数时默认删除最后一个元素 集合.pop(索引) 清空列表中的所有元素 集合.clear() 删除指定索引的元素,本质上是用来将一个变 ...
最新文章
- 腾讯58篇论文入选CVPR 2019,两年增长超200%
- #029 博客换个主题从新开始
- 图的邻接矩阵简单实现Win32版本
- linux date 小写h,linux date 命令详解[转载]
- 笔记本电脑如何保养_嘉兴专业笔记本电脑喷漆加工厂价格实惠
- macos php无法访问,Mac上,Apache启动正常,却无法访问localhost和127.0.0.1
- Java DataOutputStream size()方法及示例
- [NOIp提高组2014]解方程
- S19王者荣耀服务器维护,王者荣耀:S19新赛季更新,她没上线惨遭重做,英雄调整,界面优化...
- 盘点Windows10系统的使用小技巧二 —— 磁贴
- 访谈完100个年入百万的自媒体人后,我总结了出了他们的共性
- 既是老师又是师兄的临别箴言 .
- android 7.0读写 sdcard,Android 学习笔记之SDCard读写
- Conky-colors详细教程
- webpack的面试题总结
- 实战:模拟登录知乎网站(添加cookie)
- c语言程序设计数组实验报告,c语言程序设计实验报告(数组).doc
- 给定一个层数n,输出字母三角形
- 2000-2021年各省GDP包括名义GDP、实际GDP、GDP平减指数(以2000年为基期)
- android ftp客户端