0

私はPythonでリストがどのように機能するかをテストしているところですが、非常に混乱し、イライラしていることがわかりました。なんらかの理由で、コードに常にエラーメッセージが表示されます。

def listtest(list1,x):
    list2 = []
    count = 0
    for n in list1:
        if list1[count] == x:
            count += 1
        else:
            list2 = list.append(list2,list[count])
            count += 1
    return list2

どういうわけか、list.appendそれは混乱を招く1つの引数だけを受け入れると私に言っています。インタラクションウィンドウでは、そのような2つの引数を使用してappendを呼び出すことができlist.append(list,3)、問題なく機能します。私が得ている他のエラーは

list2 = list.append(list2,list[count])
TypeError: 'type' object has no attribute '__getitem__'

これは私にはまったく無意味であり、決して役に立ちません。私のコードの何が問題になっていますか?インタラクションウィンドウが他のウィンドウと異なる動作をするのはなぜですか?インタラクションウィンドウのように作品を追加しないのはなぜですか?

4

4 に答える 4

3

編集: いくつかのより注意深い分析の後に書き直されました:

あなたの当面の問題はlist[count]、どちらがすべきかということlist1[count]です。組み込みの型listはインデックス付けできません(リストではなく型であるため)。そのため、サポートされていないメソッドTypeErrorについて取得できます。__getitem__()

しかし、あなたが書いたとしてもlist2 = list.append(list2,list1[count])、あなたはまだ問題を抱えているでしょう。そのコード行は何をしますか?

  1. に追加list1[count]list2ます。ここまでは順調ですね。
  2. list.append()呼び出しの結果をに割り当てlist2ます。.append()はインプレースで呼び出されるオブジェクトを変更するメソッドであるため、常に。を返しますNone
  3. だから今list2ですNone
  4. 次に その行を呼び出すと、オブジェクトに何も追加できないため、別行が表示されます。TypeErrorNoneType

だから、あなたが書くべきだったのは

list2.append(list1[count])

これでうまくいくでしょうが、これを行うには非常に回りくどい方法です。実際に必要のないインデックスを追跡することは非常に非Python的です-言語はそれよりもはるかに表現力があります。PythonでJavaプログラムを作成しようとしないでください。あなたの関数(あなたの目的が本当にとlist1同じであるすべてのオブジェクトを含む新しいリストを作成することでxある場合-私はポイントを完全に見ることができません)は次のように書くことができます

def listtest(list1, x):
    return [item for item in list1 if item == x]

それは単に書くよりもはるかに便利ではありませんが

list1.count(x)

xこれにより、に表示される回数がわかりますlist1

于 2012-12-19T18:51:23.310 に答える
1

あなたのエラーは無意味ではありません、彼らはあなたに根本的な問題を指摘しようとしています。は組み込み型であるlistため、変数名として使用しないでください。listさらに、appendリストに移動しようとするときは、1つの引数のみを渡します。あなたはそうappendすることができますtuple

myList.append(('val1', 'val2'))
于 2012-12-19T18:52:11.777 に答える
1

に追加する場合は、ではなくlist2を使用してください。list2.append()list.append()

于 2012-12-19T18:52:41.553 に答える
0

リストに追加できるアイテムは、一度に1つだけです。2番目のリストのアイテムを使用してリストをextend()することができます。これは、基本的に、2番目のリストの個々のアイテムを最初のリストに追加することを意味します。ここで理解しにくいことは何ですか?リストAPIは非常によく文書化されており、明確です。

于 2012-12-19T18:51:14.473 に答える