我试图创建它,以便用户输入嵌套列表的索引,然后删除该指定的元素。例如,用户应输入:my_list[0][3]
,它将删除该元素
这是我尝试过的:
def nested_remove(L, x):
if x in L:
L.remove(x)
else:
for element in L:
if type(element) is list:
nested_remove(element, x)
my_list=[["A",0,0,0],["B",0,0,0],["C",0,0,0],["D",0,0,0]]
x=int(input("What would you like to remove?"))
nested_remove(my_list, x)
print(my_list)
我需要它将用户输入标识为索引,而不是整数。我目前得到的错误是:
value error: invalid literal for int() with base 10: 'my_list[0][3]'
答案 0 :(得分:0)
因此,从您的代码段开始,您可以使用单个列表(即不嵌套)。但是,当涉及嵌套列表时,您正面临着这个问题。这里的问题在于你的来电。从您的输出中调用时: -
value error: invalid literal for int() with base 10: 'my_list[0][3]'
我相信你传递的是my_list[0][3]
。
并且您希望这将被评估,并将返回您要从列表中删除的值。因此,您希望,您将获得一个整数(作为上述评估的结果),这就是将类型转换为int
的原因。
需要注意的是,评估表达式,而不是值。并且,当我们将值传递给input()
时,解释器并不接受它作为表达式,因此没有评估。它只是将其存储为字符串。因此,int
类型转换因上述错误而失败,因为my_list[0][3]
未被评估。
所以我建议你为什么不接受2个元素的元组,其中第一个元素指定列表编号,第二个元素是第一个元素中指定的列表中元素的索引。
def nested_remove(L, x):
def _process_input(L,x):
x = x.split(',')
if len(x) == 1:
k= int(x[0])
else:
k = (L[int(x[0])][int(x[1])])
L = L[int(x[0])]
return L,k
L,x = _process_input(L,x)
try:
L.remove(int(x))
except ValueError as e:
print ("Value not present")
print(L)
在上面,当存在单个列表时传递元素,当存在嵌套列表时传递元组(用逗号分隔)。 _process_input()
方法解析您的输入并返回要删除的值和列表。
现在使用嵌套列表运行上面的代码: -
>>> my_list=[["A",1,2,3],["B",4,5,6],["C",7,8,9],["D",10,11,12]]
>>> nested_remove(my_list, x)
What would you like to remove :- 3,1
[['A', 1, 2, 3], ['B', 4, 5, 6], ['C', 7, 8, 9], ['D', 11, 12]]
当存在单个列表时: -
>>> my_list = [34, 5, 76]
>>> nested_remove(my_list, x)
What would you like to remove :- 5
[34, 76]
希望这有帮助