382

次のPythonコードがある場合

>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]

x常にそうなることが保証されますか、[1,2,3]それとも暫定要素の他の順序付けが可能ですか?

4

7 に答える 7

574

はい、Pythonリスト内の要素の順序は永続的です。

于 2012-12-04T00:11:45.860 に答える
101

要するに、はい、順序は保持されます。長い間:

一般に、次の定義は常にリストなどのオブジェクトに適用されます。

リストは、重複する要素を含むことができる要素のコレクションであり、明示的に行われない限り、通常は変更されない定義済みの順序があります。スタックキューはどちらも、要素を追加および削除するための特定の(多くの場合制限された)動作を提供するタイプのリストです(スタックはLIFO、キューはFIFO)。リストは、物事のリストを実際に表したものです。文字列は文字のリストと考えることができます。順序が重要であり("abc" != "bca")、文字列の内容の重複が確実に許可されるためです("aaa"存在する可能性があります!= "a")。

セットは、重複を含めることができない要素のコレクションであり、時間の経過とともに変化する場合と変化しない場合がある不明確な順序を持っています。セットは、物事の特定の選択の範囲を説明するので、物事のリストを表すものではありません。セットの内部構造、つまりその要素が相互にどのように格納されるかは、通常、有用な情報を伝えることを意図したものではありません。一部の実装では、セットは常に内部でソートされます。その他の場合、順序は単純に定義されていません(通常はハッシュ関数に依存します)。

コレクションは、(通常は可変の)数の他のオブジェクトを格納するために使用されるオブジェクトを指す一般的な用語です。リストとセットはどちらもコレクションの一種です。タプルと配列は通常、コレクションとは見なされません。一部の言語では、マップ(異なるオブジェクト間の関連付けを記述するコンテナー)も一種のコレクションと見なされます。

この命名スキームは、Python、C ++、Java、C#、Lisp(リストが順序を守らないと特に壊滅的)を含む、私が知っているすべてのプログラミング言語に当てはまります。これが当てはまらない場所を誰かが知っている場合は、そのように言ってください。答えを編集します。特定の実装では、C++のvectorやALGOL68のflexなど、これらのオブジェクトに他の名前を使用する場合があることに注意してください(両方のリスト。flexは技術的にはサイズ変更可能な配列です)。

ここでの記号の動作の詳細が原因でケースに混乱が残っている場合は、リストの順序が重要+であることを知っておいてください。そうでないと信じる十分な理由がない限り、リスト操作は順序を保持しているとほぼ常に安全に想定できます。 。この場合、記号は文字列(とにかく実際には単なる文字のリスト)の場合と同じように動作します。リストのコンテンツを取得し、別のコンテンツの後ろに配置します。+

私たちが持っている場合

list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]

それで

list1 + list2

と同じです

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]

に評価されます

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

のように

"abdcde" + "fghijk"

生産する

"abdcdefghijk"
于 2012-12-04T00:17:25.380 に答える
9

「セット」と「リスト」を混同しています。セットは順序を保証しませんが、リストは保証します。

セットは中括弧を使用して宣言されます:{}。対照的に、リストは角かっこを使用して宣言されます[]

mySet = {a, b, c, c}

順序を保証するものではありませんが、リストは次のことを保証します。

myList = [a, b, c]
于 2015-11-20T22:41:45.457 に答える
5

たとえば、2が異なる番号になるように、エントリが変更される可能性があるかどうかが、あなたに関係している可能性があると思います。Pythonでは整数は不変であり、作成後に変更できないため、ここで安心できます。

ただし、Pythonのすべてが不変であるわけではありません。たとえば、リストは変更可能です---作成後に変更できます。たとえば、リストのリストがある場合

>>> a = [[1], [2], [3]]
>>> a[0].append(7)
>>> a
[[1, 7], [2], [3]]

aここで、 (追加)の最初のエントリを変更しまし7た。注意しないと、ここで物事をシャッフルし、予期しないものが発生することを想像できます(実際、これは、何らかの方法でPythonでプログラミングを開始したときにすべての人に起こります。このサイトで、「ループしながらリストを変更する」を検索してください。数十の例を参照してください)。

それを指摘する価値もあり、同じことx = x + [a]x.append(a)はありません。2つ目はを変更xし、1つ目は新しいリストを作成してに割り当てxます。y = x違いを確認するには、何かを追加してそれぞれを試す前に設定を試しxて、2つの違いを確認してくださいy

于 2013-10-24T04:52:56.427 に答える
1

はい、他の操作を実行しない限り、リストは[1,2,3]のままになります。

于 2021-03-10T21:20:10.313 に答える
0

aList = [1,2,3]

i = 0

for item in aList:  

    if i<2:  

            aList.remove(item)  

    i+=1  

リスト

[2]

道徳は、リストによって駆動されるループでリストを変更する場合、2つのステップを実行することです。

aList=[1,2,3]
i=0
for item in aList:
    if i<2:
        aList[i]="del"
    i+=1

aList

['del', 'del', 3]
for i in range(2):
    del aList[0]

aList
[3]
于 2014-11-06T15:19:01.490 に答える
0

はいリストとタプルは常に順序付けられますが、辞書は順序付けられません

于 2016-10-11T19:57:21.820 に答える