簡體   English   中英

為什么在python中將值分配給列表時出現錯誤?

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

a=[5]創建一個大小為1的列表。以下有效:

a[0] = 1

但是您不能僅通過將值分配給給定的不存在位置來更改列表的大小。

不過,您可以使用append+=來擴展列表:

a.append(2)
a += [2]

您還可以預先分配給定大小的列表:

a = [0] * 4

這將為您提供包含四個元素(全為零)的列表。 之后,您可以更改0-3范圍內的任何元素。

作為參考,這里有python.org 列表上的一些文檔

錯誤消息是不言自明的。

要強制創建新項目,可以使用切片:

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.

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