2012-02-26 2 views
0

私はリストを持っており、newlist[i] = 'literal' + oldlist[i]という新しいリストを作りたいと思います。最初にリスト要素を変更できないのはなぜですか?

私が試してみましたコードは次のように:

i = 1 
for elem in oldlist: 
newlist[i] = 'literal' + oldlist[i] 
i += 1 

i = 1 
for elem in newlist: 
elem = 'literal' + oldlist[i] 
i += 1 

と多くの類似の試みは、まだ、このような「コールを機能するように割り当てることはできません」などのエラーなどを取得しておきます。私のコードはどうすればいいですか?

答えて

4

リストはゼロベースの意味です等しいことを意味し、インデックスは0から始まる番号が付けられ、そのリストを覚えていますリストの最初の項目はインデックス0です。

例えば、

l = [1, 2, 3, 4, 5] 

print(l[0]) # 1 
print(l[1]) # 2 

あなたはあなたの最初の項目が変更されることは決してありませんので、1であなたのインデックス作成を始めています。


あなたのコードは正規の「インデックス付きループ」フォーマットに適合しませんが、これは、より次のようになります。

for i in range(len(oldlist)): 
    newlist[i] = 'literal' + oldlist[i] 

しかし、これを行うにしても良い方法は、リストの内包表記を使用することです:

newlist = ['literal' + olditem for olditem in oldlist] 
+0

は、リストの内包について私に教えてくれてありがとう!これは私が知らなかった非常に便利なコンセプトです。 – rab777hp

1

elemはリスト内の値であり、リスト内の位置への参照ではないためです。 (私はあなたが持っている2番目の例を参照してください)

3

リストの理解を使用してください。

newlist = ['literal' + x for x in oldlist] 
1

リスト内包してみてください:

また
newlist = [item + literal for item in oldlist] 

、最大インデックスはlen(list) - 1

関連する問題