[英]How to take user input of an index for a nested list?
我正在嘗試使用戶輸入嵌套列表的索引,然后將其刪除。 例如,用戶應輸入: 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]'
因此,從您的摘要中,您可以選擇一個列表(即不嵌套)。 但是,當涉及嵌套列表時,您將面臨這個問題。 這里的問題是您打電話給您。 調用時,從您的輸出中:-
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個元素的元組,其中第一個元素將指定列表編號,第二個元素將指定第1個元素中指定的列表中元素的索引。
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]
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.