1

タプルのリストに「カウント」(0 から始まる) を挿入しようとしています。私はこのようなものを持っています:

list = [(1, 'Cat', 200, 3.2), (4, 'Dog', 204, 4.1), (2, 'Rabbit', 519, 2.0)]

そして、私はそれが次のようになりたい:

list = [(1, 'Cat', 200, 0, 3.2), (4, 'Dog', 204, 1, 4.1), (2, 'Rabbit', 519, 2, 2.0)]

私はこのようなことを試しました:

>>> i = 0
>>> for line in list:
...     list.insert(-2,i)
...     i+=1
...     print list

しかし、それはタプルの間にすべてのカウントを挿入します。これは私が望むものではありません。これに苦労している Python 初心者を助けてくれる人はいますか? ありがとうございました!

4

4 に答える 4

2

がタプルの場合、タプルをスライスして連結し直すことで、要求された場所にxカウントを挿入できます。i

x[:3] + (i,) + x[3:]

where(i,)は、1 要素のタプルを作成するための (やや厄介な) 構文です。例えば

>>> x = (1, 'Cat', 200, 3.2)
>>> x[:3] + (0,) + x[3:]
(1, 'Cat', 200, 0, 3.2)

これにより、新しいタプルが作成されることに注意してください。Python で既存のタプルを変更することはできません。そのためには、リストが必要です。

コードがタプルの間にカウントを挿入している理由は、変数listline変数を混同しているためです。list代わりにその要素を操作しています。

(しかし、5 要素のタプルを扱っている場合は、namedtupleまたはカスタム クラスの使用を検討する必要があります。)

于 2012-10-23T20:49:08.147 に答える
2
In [11]: lis=[(1, 'Cat', 200, 3.2), (4, 'Dog', 204, 4.1), (2, 'Rabbit', 519, 2.0)]

In [12]: lis=map(list,lis) #convert tuples to list


In [13]: lis       #now lis is list of lists instead of list of tuples
Out[13]: 
[[1, 'Cat', 200, 3.2000000000000002],
 [4, 'Dog', 204, 4.0999999999999996],
 [2, 'Rabbit', 519, 2.0]]

#use enumerate() for indexes, no need of manual indexing

In [14]: for i,x in enumerate(lis):
    x.insert(-1,i)                #insert at -1 not -2
   ....:     
   ....:     

In [15]: lis
Out[15]: 
[[1, 'Cat', 200, 0, 3.2000000000000002],
 [4, 'Dog', 204, 1, 4.0999999999999996],
 [2, 'Rabbit', 519, 2, 2.0]]
于 2012-10-23T20:55:31.543 に答える
1

タプルは不変です(つまり、作成後に変更することはできません)。新しいタプルを作成し、代わりにそれを保存する必要があります。これを試して:

def insert_counts(old_list):
    new_list = []
    i=0
    for old_tuple in old_list:
        new_tuple = (old_tuple[0:2] + (i,) + old_tuple[2:])
        new_list.append(new_tuple)
        i+=1
    return new_list
于 2012-10-23T21:02:41.527 に答える
1

タプルを変更することはできません。内部でリストを使用します。また、変数に他のクラスの名前を付けないようにしてください (リストはクラス名です)。

data = [[1, 'Cat', 200, 3.2], [4, 'Dog', 204, 4.1], [2, 'Rabbit', 519, 2.0]]
for index, line in enumerate(data):
    line.insert(-1,index)
    print(data)

タプルの元のリストから移動したい場合、簡単な方法の 1 つはループ内でコピーを作成することです。

newdata=[]
for index, line in enumerate(data):
    linecopy = list(line)
    linecopy.insert(-1,index)
    newdata.append(linecopy)
    print(newdata)
于 2012-10-23T20:50:50.230 に答える