[英]Why am I getting the error for assigning values to list here in python?
而不是通過list.append()將值附加到列表中,為什么我不能像這樣給它分配值?
In [24]: def a():
....: a1=[5]
....: print a1[0]
....:
In [25]: a()
5
In [28]: def a():
....: a1=[5]
....: a1[1]=12
....: print a1[1]
....:
In [29]: a()
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
/home/dubizzle/webapps/django/dubizzle/<ipython-input-29-72f2e37b262f> in <module>()
----> 1 a()
/home/dubizzle/webapps/django/dubizzle/<ipython-input-28-681d86164e67> in a()
1 def a():
2 a1=[5]
----> 3 a1[1]=12
4 print a1[1]
5
IndexError: list assignment index out of range
錯誤消息是不言自明的。
要強制創建新項目,可以使用切片:
a1 = [5]
a1[1:2] = [12]
如果您不關心元素的順序,則可以使用字典:
d = {}
d[1] = 12
如果您確實想要的話,可以創建自己的類,當您請求不存在的索引時重新定義類別(並用None
填充其余部分)
class mylist():
def __init__(self,l):
self.l = l
def extend(self,index):
diff = index + 1 - len(self.l)
if diff > 0:
self.l.extend([ None for x in range(diff) ] )
def __getitem__(self,index):
# self.extend(index) ## depending on your taste
return self.l[index]
def __setitem__(self,index,value):
self.extend(index)
self.l[index] = value
def __repr__(self):
return self.l.__repr__()
a = mylist([0,1,2,3])
print 'List: %s' % a
# print a[5] ### this will throw an 'list index out of range' unless you comment out the bit in __getitem__
a[5] = 5
print 'List: %s' % a
print a[5]
哪個輸出:
List: [0, 1, 2, 3]
List: [0, 1, 2, 3, None, 5]
5
在http://pythonfiddle.com/auto-dimension-list上查看
這是不完整的,因為您還需要橋接list的所有其他方法,如果某些專家可以做到這一點,則不確定如何執行此操作(可能是一些getattr ?)!
您應該預先將其填充為None或添加索引的內容
myList = [None] * 10
myList[1] = 'a'
由於list最初是一個麻煩事,沒有添加就無法添加任何內容。
a1[x] = y
這不會發生,因為如果列表僅包含1個項目,並且您嘗試分配a1[3]
,它將在列表中的其他兩個[1][2]
項目中分配什么?
使用內置方法對類型進行修改。 .append()
.insert()
list.append()在列表中添加一個元素,並且a [1] ='x'為具有索引1的列表項分配一些值。您的代碼存在問題,您正在嘗試訪問一個不存在的內存塊。 試試這個吧。
def a():
a1=[5, 0]
a1[1]=12
print a1[1]
要么
def a()
a1 = list('abc')
a1[1]=12
print a1[1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.