0

list.append()によって値を list に追加する代わりに、なぜこのように値を割り当てることができないのですか?

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
4

6 に答える 6

4

a=[5]サイズ1のリストを作成します。以下が有効です。

a[0] = 1

ただし、存在しない特定の位置に値を割り当てるだけでは、リストのサイズを変更することはできません。

appendただし、またはを使用してリストを拡張できます+=

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

特定のサイズのリストを事前に割り当てることもできます。

a = [0] * 4

これにより、4つの要素(すべてゼロ)のリストが得られます。その後、0〜3の範囲の任意の要素を変更できます。

参考までに、ここにpython.orgのリストに関するいくつかのドキュメントがあります。

于 2012-07-18T12:45:41.550 に答える
2

エラーメッセージは一目瞭然です。

新しいアイテムを強制的に作成するには、スライスを使用できます。

a1 = [5]
a1[1:2] = [12]

要素の順序を気にしない場合は、辞書を使用できます。

d = {}
d[1] = 12
于 2012-07-18T12:56:24.240 に答える
1

本当にしたい場合は、存在しないインデックスを要求したときに再次元化する独自のクラスを作成できます (残りを で埋めます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でチェックしてください

リストの他のすべてのメソッドも橋渡しする必要があるため、これは不完全です。その方法がわからない (おそらくgetattr ?) 専門家がそれにチャイムを鳴らすことができれば素晴らしいでしょう!

于 2012-07-18T13:17:45.480 に答える
0

インデックスを追加するには、Noneまたは何かを事前に入力する必要があります

myList = [None] * 10
myList[1] = 'a'

なぜなら、リストは最初はtoupleであり、追加せずに何も追加することはできません。

于 2012-07-18T12:47:16.397 に答える
0

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]
于 2012-07-18T12:56:14.803 に答える
0
a1[x] = y

これは、リストに 1 つの項目しか含まれていない場合に、リストa1[3]内の他の 2 つの[1][2]項目に何を割り当てようとしているのですか?

タイプの組み込みメソッドを使用してそれらを変更します。.append() .insert()

于 2012-07-18T12:49:58.600 に答える