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