簡體   English   中英

如何讓用戶輸入嵌套列表的索引?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM