簡體   English   中英

類型錯誤列表索引必須是整數而不是 str python。 為什么?

[英]type error list indices must be integers not str python. Why?

這是用於格式打印多個列表的代碼:

print("{0[0]:10s} {1[0]:20} {2[0]:5} £{3[0]:6} £{4[0]:<7}".format(gtinlist, desclist, qtylist, pricelist, valuelist))

這將打印每個列表的第一個值但是一旦我將其更改為:

print("{0[0:9]:10s} {1[0:9]:20} {2[0:9]:5} £{3[0:9]:6} £{4[0:9]:<7}".format(gtinlist, desclist, qtylist, pricelist, valuelist))

如果我把任何數字放在 :9 的位置,它就不起作用。 我不明白為什么

幫助?

如果要打印第 9 個位置,可以使用

"{0[8]:10s}"

使用

"{0[0:9]:10s}"

將告訴format()使用鍵"0:9" ,它是一個字符串,但列表只有整數鍵:

TypeError: list indices must be integers or slices, not str). 

在 python 中, derp[0:9]意味着,從key 0key 8獲取列表derp 但是format()不會將0:9解釋為 python 語法。 Format 會檢查實例是否有__getitem__方法並將密鑰傳遞給它。

>>> class donk():
...     def __getitem__(self, k):
...           return 5
... 
>>> a = donk()
>>> 'bla{0[3]}'.format(a)
'bla5'

如果你想在這里打印前 8 個元素,可能用逗號分隔,你可以使用:

", ".join(['{:10s}'.format(a) for a in my_list[0:9])

附加:如果您想在單獨的行上打印數組中的所有內容,您可以使用 for 循環:

for i, gt in enumerate(gtinlist):
    print("{:10s} {:20} {:5} £{:6} £{:<7}".format(gt, desclist[i], stylist[i], priceless[i], valueless[i]))

在這種方法中len(gtinlist) <= len(stylist), len(priceless), len(valueless)

顯然那里不支持切片,只有整數(變成整數)和其他所有內容都將被解釋為字符串索引:

>>> class Foo:
        def __getitem__(self, index):
            print('got asked for:', type(index).__name__, repr(index))

>>> x = '{0[3]}'.format(Foo())
got asked for: int 3
>>> x = '{0[3:7]}'.format(Foo())
got asked for: str '3:7'

如果請求切片,它會是什么樣子:

>>> Foo()[3:7]
got asked for: slice slice(3, 7, None)

我檢查了文檔,但無法真正找到答案,只是“形式 '[index]' 的表達式使用__getitem__()進行索引查找” ,它可以支持切片。 但它甚至沒有提到整數會變成整數。

暫無
暫無

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

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