簡體   English   中英

錯誤:列表索引必須是整數或切片,而不是元組

[英]Error: list indices must be integers or slices, not tuple

試圖讀取與 abjadMapV 一致的輸入。 然后返回 AbjadMap 中的字符。 但我不斷收到此錯誤。

def show(ln):

    abjadMapV=[1,2,3,4,5,6,7,8,9,
              10,20,30,40,50,60,70,80,90,
              100,200,300,400,500,600,700,800,900,
              1000,29]

    abjadMap=['\u0627','\u0628','\u062C','\u062F','\u0647','\u0648','\u0632','\u062D','\u0637',
          '\u064A','\u0643','\u0644','\u0645','\u0646','\u0633','\u0639','\u0641','\u0635',
          '\u0642','\u0631','\u0634','\u062A','\u062B','\u062E','\u0630','\u0636','\u0638',
          '\u063A','\uFEFC']
    abjadN=["alif","ba","jeem","dal","haa","waw","za","ha","da",
              "ya","kahf","laam","meem","noon","seen","ayn","fa","sadh",
              "qaf","ra","sheen","ta","tha","kha","thal","dhad","za",
              "gayn","lam alif"]

    i=0

    for i in enumerate(abjadMapV):
        if ln in abjadMapV[i] :
            print(i)
            print(abjadMap[i])
            return abjadMap[i]

    b=input()
    a=show(b)
    print(a)

編輯為新代碼,試圖讓 show 返回索引

def show(ln):

abjadMapV=[1,2,3,4,5,6,7,8,9,
          10,20,30,40,50,60,70,80,90,
          100,200,300,400,500,600,700,800,900,
          1000,29]

abjadMap=['\u0627','\u0628','\u062C','\u062F','\u0647','\u0648','\u0632','\u062D','\u0637',
      '\u064A','\u0643','\u0644','\u0645','\u0646','\u0633','\u0639','\u0641','\u0635',
      '\u0642','\u0631','\u0634','\u062A','\u062B','\u062E','\u0630','\u0636','\u0638',
      '\u063A','\uFEFC']
abjadN=["alif","ba","jeem","dal","haa","waw","za","ha","da",
          "ya","kahf","laam","meem","noon","seen","ayn","fa","sadh",
          "qaf","ra","sheen","ta","tha","kha","thal","dhad","za",
          "gayn","lam alif"]

i=0

for i in abjadMapV:

    if ln == i:
        return abjadMap.index(i)

b=輸入() a=顯示(b) 打印(a)

函數 enumerate 返回元組。 所以在行

print(abjadMap[i]) # i here is tuple.

而且您已經發現列表索引必須是整數而不是元組。 因此,相應地編輯您的代碼。 如果您不熟悉 enumerate 函數,請查看下面給出的示例:

l=['a','b','c']
k=enumerate(l)

enumerate 函數返回可迭代對象:所以 k 是一個可迭代對象,

next(k)

給出輸出:

(0,'a')

這意味着 0 是列表 l 中 a 的索引。

for i in enumerate(l)

i 是一個元組而不是一個整數。

enumerate()返回一個元組列表,每個元組都是一個索引值對。 您可以在迭代它們以解決問題時進行解構:

for i,j in enumerate(abjadMapV):
    if ln in j: # j is the value i. e. j = abjadMap[i] 
        print(i) # i is the index
        print(abjadMap[i] )
        return abjadMap[i] 

否則,您可以遍歷range(len(abjadMapV))並使用該變量作為索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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