0

重複の可能性:
Python リスト拡張と変数割り当て

文字列の類似物が当てはまります。

string1 = 'abc'
''.join(string1) == string1 # True

では、なぜこれが当てはまらないのですか。

list1 = ['a', 'b', 'c']
[].extend(list1) == list1 # AttributeError: 'NoneType' object has no attribute 'extend'

type([])リストを返します。拡張メソッドを持つリストではなく、NoneType として認識されるのはなぜですか?

これは学術的な質問です。これは通常のコードではありません。理解したいだけです。

4

3 に答える 3

11

list.extend()リストをその場で変更し、リスト自体を返さないためです。期待するものを得るために必要なことは次のとおりです。

lst = ['a', 'b', 'c']
cplst = []
cplst.extend(lst)
cplst == lst

あなたが参照する関数は、実際には類似していません。 join()イテレータのメンバーとjoin編集中の文字列を連結して作成された新しい文字列を返します。同様のlist操作は次のようになります。

def JoiningList(list):

    def join(self, iterable):
        new_list = iterable[0]
        for item in iterable[1:]:
            new_list.extend(self)
            new_list.append(item)
        return new_list
于 2013-01-23T21:21:20.883 に答える
5

拡張機能の戻り値をリストと比較しようとしています。extendインプレース操作です。つまり、何も返されません。

join一方、実際には操作の結果が返されるため、2 つの文字列を比較することができます。

于 2013-01-23T21:21:46.780 に答える
0
>>> first = [1,2,3]
>>> second = []
>>> second.extend(first)
>>> first == second
True
于 2013-01-23T21:23:53.243 に答える