web-dev-qa-db-ja.com

追加すると、リストがNoneTypeになります

Python Shellに、次のように入力しました:

aList = ['a', 'b', 'c', 'd']  
for i in aList:  
    print(i)

そして得た

a  
b  
c  
d  

しかし私が試したとき:

aList = ['a', 'b', 'c', 'd']  
aList = aList.append('e')  
for i in aList:  
    print(i) 

そして得た

Traceback (most recent call last):  
  File "<pyshell#22>", line 1, in <module>  
    for i in aList:  
TypeError: 'NoneType' object is not iterable  

誰かが何が起こっているのか知っていますか?どうすれば修正/回避できますか?

30
user460847

_list.append_は、既存のリストを変更するメソッドです。新しいリストを返しません-リストを変更するほとんどのメソッドと同様に、Noneを返します。単にaList.append('e')を実行すると、リストに要素が追加されます。

42
Thomas Wouters

一般的に、あなたが望むのは受け入れられた答えです。しかし、値を上書きして新しいリストを作成する動作(場合によっては妥当な場合もあります^)が必要な場合は、代わりに「splat演算子」を使用することができます。

_aList = [*aList, 'e']
#: ['a', 'b', 'c', 'd', 'e']
_

または、python 2をサポートする必要がある場合は、_+_演算子を使用します。

_aList = aList + ['e']
#: ['a', 'b', 'c', 'd', 'e']
_

^ .append()を使用して変更することによる副作用を回避したい場合がたくさんあります。まず、関数の引数として受け取ったリストに何かを追加したいとします。関数を使用している人はおそらく、提供したリストが変更されることを期待していません。このようなものを使用すると、関数は "pure" -- "副作用" なしで保持されます。

4
SCB

2番目の行aList = aList.append('e')を削除し、aList.append("e")のみを使用してください。これにより、その問題が解消されます。

3
aletelecomm