2013-06-18 15 views
161

私はPythonで遊んでいました。私は、出力が、これは何ですかPythonリストの省略記号[...]は何ですか?

[1, [...], 2] 

たIDLE

p = [1, 2] 
p[1:1] = [p] 
print p 

に次のコードを使用しましたか[...]?興味深いことに、私は今、私がいる限り、私が望んでいた、それはまだ動作と同じように上に書くことができ、すなわち

p[1][1][1].... 

無限件までリストのリストのリストとしてこれを使用することができます。

EDIT:

  • それはメモリ内でどのように表現されますか?
  • 使い方は?有用である場合の例が役に立つでしょう。
  • 公式文書へのリンクは本当に便利です。
+0

まだEDITの1番目と3番目のリスト要素に対する回答を探しています。 –

+5

より単純な例は 'p = [1]; p [0] = p 'である。 – arshajii

+6

これは[Pythonのリストの中の\ [... \](省略記号)とは何ですか?]の複製です[](http://stackoverflow.com/q/7223222/562769)。 )この問題ではより良いです。 –

答えて

91

これは、内部にネストされた無限のリストを作成したため、印刷できないことを意味します。 pは、p ...などを含むpを含みます。 [...]という表記法は、これを知らせて、それが表現できないことを知らせる方法です。 @ 6502の答えを見て、何が起きているかを示す素晴らしい画像を見てください。今

、あなたの編集後の3つの新しいアイテムについて:

  • このanswer
  • イグナシオのlinkこれは、プログラミングよりも、データ構造設計のより多くのテーマである、いくつかの可能な用途
  • を説明し、それをカバーしているようですPythonの公式ドキュメントでは参照が見つからない可能性があります。
+0

それでは、それは記憶を取っていますか?私はそれが不可能であることを知っています。どのように表現され、その使用は何ですか? –

+17

@Zel:リスト要素は参照です。 2番目の要素は、リスト自体への参照です。 –

+1

Pythonではリファレンスを無限ループとして識別していたので、それを短くすることにしました。実際は無限ではありません。そして、いいえ、思考実験以外には本当に役に立たないでしょう:) –

19

"What 'その使用 "、具体的な例がここにあります。

Graph reductionはいつかコンピュータ言語を解釈するために使用される評価戦略です。これは遅延評価のために、特に関数型言語の一般的な戦略です。

出発点は、プログラムが取る「ステップ」のシーケンスを表すグラフを構築することです。そのプログラムで使用される制御構造に応じて、このプログラムは、「永遠」のループのいくつかの種類が含まれているため(巡回グラフにつながるかもしれない - 「深さ」評価時点で知られているであろうか、使用の再帰を、しかし、ない、このようなグラフを表現するためにグラフ作成時間)...

で、あなたは気づい1のように、無限「データ構造」(いつか再帰データ構造と呼ばれる)が必要です。通常は、もう少し複雑なものの。

あなたがそのトピックに興味がある場合は、ここではそのテーマに関する講義は、(他の多くの間)である:
http://undergraduate.csse.uwa.edu.au/units/CITS3211/lectureNotes/14.pdf

286

これはあなたのコードが

enter image description here

を作成した何それはどこリストですさ最初と最後の要素は2つの数値(1と2)を指し、中間要素はリスト自体を指しています。 Common Lispでは

円形の構造を印刷

オブジェクトは三つの要素、第二された状態でのベクトルであること( #1=とラベル1)オブジェクトがあることを意味

#1=#(1 #1# 2) 

として印刷されるよう有効になっていますオブジェクト自体(#1#で逆参照)。

代わりに、構造体が円であるという情報を[...]で取得するだけです。

この特定のケースでは、説明はあいまいではありません(逆方向のリストを指していますが、リストは1つだけです)。他の場合には

[1, [2, [...], 3]] 

、例えば...外側または内側のリストへの可能性のいずれかの逆方向参照が曖昧であってもよいです。同様に、プリント これら二つの異なる構造が

x = [1, [2, 3]] 
x[1][1:1] = [x[1]] 

y = [1, [2, 3]] 
y[1][1:1] = [y] 

print x, y 

で作成することができると私は理解されるように、それらが

enter image description here

+55

+1の場合 – teukkam

+2

+1、特に手で描いた場合は+1。 –

+0

'[1、[2、[...]、3]]'の内容は次のようになります: 'x [1] = [2、[...]、3]'と 'y [ 1] = [2,1、[...]]、3]となる。これは、xは1から2までの繰り返しからなり、yは1と2の交互の繰り返しからなることを意味します。 – pascalhein

2

としてメモリになり、これは、固定小数点

の一例です
p = [1, 2] 
p[1:1] = [p] 
f = lambda x:x[1] 
f(p)==p 
f(f(p))==p 
+0

私はこれを理解できませんでした。これらのコマンドを実行しようとしましたが、エラーがあります。 –

+0

@Zel:pが宣言されるように、OPsコードを追加する必要があります。 – Inkane

+0

@Inkaneそれでも、これは質問に関して私には意味をなさない。 –

5

私たちはオブジェクト指向プログラミングでこれを常に行っています。任意の2つのオブジェクトが互いに直接的または間接的に参照する場合、それらは無限に再帰的な構造(またはそれをどのように見ているかに応じて同じ無限回帰的構造の両方の部分)です。だからこそ、これはリストのように何かに原型としては見えません。なぜなら、概念を「無限リスト」よりも相互に関連した「オブジェクト」として説明する方が良いからです。

...を無限に再帰的な辞書で入手することもできます。三角形のコーナーの辞書が必要な場合、各値はそのコーナーに接続されている他のコーナーの辞書です。任意の二つの角がそれぞれにバックアップを参照しているので、あなたがtriangle(またはそのことについてaまたはbまたはc)を印刷する場合、あなたはそれが{...}のフルだ参照してくださいよ今

a = {} 
b = {} 
c = {} 
triangle = {"a": a, "b": b, "c": c} 
a["b"] = b 
a["c"] = c 
b["a"] = a 
b["c"] = c 
c["a"] = a 
c["b"] = b 

を:あなたはこのようにそれを設定することができその他。

+0

簡単な辞書の例: 'a = {}; a ['a'] = a; "[a]] ['a'] ['a']' – user650654

+0

私の場合、「...」の代わりに「」と表示されます。 –

+0

@SolomonUckoおそらく使用しています自動的に[pprint](https://docs.python.org/2/library/pprint.html)を使って物を印刷するIPython。 '%pprint'と入力すると、かわいい印刷をオフにすると、' ... 'と表示されます。 – nmclean

-2

特別なオブジェクトの名前は、省略記号です。私はそれがPython intepreter/VMの中のシングルトンオブジェクトとして実装されていると思う - 何もない---一種のセンチネル。これまで見てきたように、Pythonはリスト自体の参照を表現する方法です。

+0

奇妙なことに、Ellipsisオブジェクトを直接インスタンス化する方法がないようです。名前は、例えばBuiltinsインターフェースを通して公開されません。たとえば、省略記号を索引として使用して項目を抽出しようとすると、特定のエラー(例外が発生)での用語への参照が表示されます。しかし、あなたはちょうど言うことができます:el = Ellipsis()やそれ以外のもの(私が見つけたもの)。 –

+7

これは、実際にはEllipsisオブジェクトとは関係ありません。リテラル文字列 "[...]"は、リストの印刷中にサイクルが検出されたときに出力されます。コードを参照してください:http://hg.python.org/cpython/file/84d6c1c0665e/Objects/listobject.c#l357 –

関連する問題