删除Python中其他列表中的列表元素
在做一些与列表和函数相关的Python练习时,我遇到了以下代码:删除Python中其他列表中的列表元素,python,python-3.x,Python,Python 3.x,在做一些与列表和函数相关的Python练习时,我遇到了以下代码: list = [0, 1, 2, 3, 4] def function (lst): del lst[lst[3]] return lst print (function (list)) 产生以下输出: [0, 1, 2, 4] 但是,在下面的代码中,会发生一些不同的情况: list = [0, 1, 4, 9, 16] def function (lst): del lst[lst[3]]
list = [0, 1, 2, 3, 4]
def function (lst):
del lst[lst[3]]
return lst
print (function (list))
产生以下输出:
[0, 1, 2, 4]
但是,在下面的代码中,会发生一些不同的情况:
list = [0, 1, 4, 9, 16]
def function (lst):
del lst[lst[3]]
return lst
print (function (list))
它输出以下错误:
Traceback (most recent call last):
File "...", line 9, in <module>
print (function (list))
File "...", line 5, in function
del lst[lst[3]]
IndexError: list assignment index out of range
Process finished with exit code 1
回溯(最近一次呼叫最后一次):
文件“…”,第9行,在
打印(功能(列表))
文件“…”,第5行,在函数中
del lst[lst[3]]
索引器:列表分配索引超出范围
进程已完成,退出代码为1
在这种情况下,它只“允许”我删除元素[2],结果是:[0,1,4,9]
在这种情况下,我不太理解列表中的列表的用法,以及为什么有时它执行时好像只有一个列表;其他时候,“内部”列表的长度较小。
如果有人能澄清这个新手问题,我将不胜感激
提前谢谢你 这是因为lst[lst[3]]表示转到index=lst[3]。例如,在第一个示例中,lst[3]=3 so lst[lst[3]]=lst[3],但在第二个示例中,lst[3]=9 so lst[lst[3]=lst[9],但数组的长度是5,这就是索引超出范围异常的原因。
list=[0,1,2,3,4]
def功能(lst):
德尔一世[lst[3].#可以这样做,因为lst[3]的值为3
#所以基本上你删除了第四项
返回lst
打印(功能(列表))
实际上,您在这里所做的是根据列表中的值为列表编制索引 因此,如果
list=[0,1,4,9,16]
,list[3]
等于9
(第四个元素)
如果调用
list[list[3]]
实际上是在调用超出范围的list[9]
。在第二个实例中,您会看到索引超出范围错误,因为del方法正在尝试查找列表中的第9个元素。是这样的:
list = [0, 1, 4, 9, 16]
def function (lst):
del lst[lst[3]] # Here, python first evaluates lst[3] -> 3rd element from list. Which is 9. And then, evaluates del lst[9] -> tries to find 9th element in list, which doesn't exist.
return lst
print (function (list))
执行此操作时:
list = [0, 1, 4, 9, 16]
def function (lst):
del lst[lst[2]] # lst[2] evaluates to 2nd element from list, which is 4, and del lst[4] evaluates to 4th element in the list, which is 16 and deletes 16 from list.
return lst
print (function (list))
如果需要删除列表索引3处的数字
list = [0, 1, 4, 9, 16]
def function (lst):
del lst[3]
return lst
print (function(list))
[0, 1, 4, 16]
如果执行lst[lst[3]]
,首先它会在lst索引3处找到数字,其中值为9,删除列表[9]
会给出索引超出范围的错误,因为lst的长度为5:
list = [0, 1, 4, 9, 16]
def function (lst):
del lst[3]
return lst
print (function(list))
[0, 1, 4, 16]