উপবৃত্তির […] একটি তালিকার অর্থ কী?


196

আমি অজগরের চারপাশে খেলছিলাম। আমি IDLE তে নিম্নলিখিত কোডটি ব্যবহার করেছি:

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

আউটপুটটি ছিল:

[1, [...], 2]

এটা কি […]? মজার বিষয় হল আমি এখন অনন্ত অর্থাৎ তালিকার তালিকার তালিকার তালিকা হিসাবে এটি ব্যবহার করতে পারি

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

আমি যতক্ষণ চাই উপরে উপরে লিখতে পারি এবং এটি এখনও কার্যকর হবে।

সম্পাদনা করুন:

  • এটি স্মৃতিতে কীভাবে উপস্থাপিত হয়?
  • এর ব্যবহার কী? এটি দরকারী যেখানে কিছু ক্ষেত্রে উদাহরণ সহায়ক হবে।
  • অফিসিয়াল ডকুমেন্টেশনের যে কোনও লিঙ্ক সত্যই কার্যকর হবে।

এখনও ইডিআইটির প্রথম এবং তৃতীয় তালিকার উত্তরগুলির সন্ধান করছে।
অসীম বানসাল

7
এর একটি সহজ উদাহরণ হবে p = [1]; p[0] = p
আর্শাজি

6
আমি মনে করি এটি পাইকনের একটি তালিকার […] (একটি উপবৃত্ত) এর অর্থ কী? যদিও এই প্রশ্নে প্রশ্ন (এবং উত্তর) ভাল।
মার্টিন থোমা

1
ড্রিম্পি স্মার্ট `>>> পি [1: 1] = [পি] >>> পি 3: [1, <আইডির সাথে তালিকায় পুনরাবৃত্তি = 3074777548>, 2] >>>` সঠিক বিবরণ সরবরাহ করুন
রাহুল গৌতম

@ রাহুলগৌতম এটি পেলেন না p 3: [1, <Recursion on list with id=3074777548>, 2]। কী ছুটলেন?
অসীম বানসাল

উত্তর:


112

এর অর্থ হ'ল আপনি নিজের ভিতরে নেস্টেড একটি অসীম তালিকা তৈরি করেছেন, যা মুদ্রণ করা যায় না। pএতে pরয়েছে p... এবং আরও কিছু রয়েছে । [...]স্বরলিপি আপনি এই জানি, আর আনন্দের সাথে জানাচ্ছি যে এটা প্রতিনিধিত্ব করা যাবে না যাক একটি উপায় হয়! যা ঘটছে তা দেখানোর জন্য একটি সুন্দর ছবি দেখতে 6502 এর উত্তরটি একবার দেখুন।

এখন, আপনার সম্পাদনার পরে তিনটি নতুন আইটেম সম্পর্কিত:

  • এই উত্তর এটি আবরণ বলে মনে হচ্ছে
  • Ignacio এর লিঙ্ক কিছু সম্ভাব্য ব্যবহার বর্ণনা করে
  • এটি প্রোগ্রামিং ভাষার চেয়ে ডেটা স্ট্রাকচার ডিজাইনের একটি বিষয়, সুতরাং পাইথনের অফিসিয়াল ডকুমেন্টেশনে কোনও রেফারেন্স পাওয়া যায় না এমন সম্ভাবনা কম unlikely

সুতরাং এটি কি infinte স্মৃতি নিচ্ছে? আমি জানি যে সম্ভব হতে পারে না। এটি কীভাবে উপস্থাপিত হয় এবং এর ব্যবহার কী?
অসীম বানসাল

21
@ জেল: তালিকার উপাদানগুলির উল্লেখ। দ্বিতীয় উপাদানটি তালিকার একটি রেফারেন্স।
Ignacio Vazquez-Abram

2
পাইথন এটি এটিকে রেফারেন্সের একটি অসীম লুপ হিসাবে চিহ্নিত করেছে, তাই এটি এটি ছোট করার সিদ্ধান্ত নিয়েছে, এটি আসলে অসীম নয়। এবং না, এটি একটি চিন্তার পরীক্ষার পাশাপাশি সত্যই দরকারী নয় :)
এসকর লোপেজ

2
অসীম পুনরাবৃত্ত স্ট্রাকচারের জন্য কয়েকটি ব্যবহার রয়েছে। তবে অনেকের নয়।
Ignacio Vazquez-Abram

@ IgnacioVazquez-Abram কিছু উদাহরণ কার্যকর হবে।
অসীম বানসাল

316

এটিই আপনার কোড তৈরি করেছে

এখানে চিত্র বর্ণনা লিখুন

এটি এমন একটি তালিকা যেখানে প্রথম এবং শেষ উপাদানগুলি দুটি সংখ্যার (1 এবং 2) দিকে নির্দেশ করছে এবং যেখানে মাঝারি উপাদানটি তালিকার দিকেই নির্দেশ করছে।

প্রচলিত লিস্পে যখন বিজ্ঞপ্তি কাঠামো মুদ্রণ সক্ষম করা থাকে তখন যেমন একটি বস্তু মুদ্রিত হবে

#1=#(1 #1# 2)

মানে এমন একটি বস্তু রয়েছে (যার সাথে 1 লেবেলযুক্ত #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)
print(y)

এবং তারা হিসাবে স্মৃতি হতে হবে

এখানে চিত্র বর্ণনা লিখুন


আপনি এই জাতীয় বিষয়বস্তু খুঁজে পেতে পারেন [1, [2, [...], 3]]: x[1] = [2, [...], 3]এবং y[1] = [2, 1, [...]], 3]। এর অর্থ হ'ল x এর 1 টি এবং তারপরে 2s পুনরাবৃত্তি করা হয়, যেখানে y বিকল্প 1s এবং 2 গুলি সমন্বিত।
পাসক্লেইন

2
@ চ্যাসারপ্লার: অবশ্যই আপনি বিষয়বস্তু বিশ্লেষণ করে দুটি পৃথক করতে পারেন, তবে সেগুলি একই প্রতিনিধিত্ব করে মুদ্রিত হয়। প্রচলিত পাতার মর্মর বিন্যাসে পরিবর্তে তারা হবে #(1 #1=#(2 #1# 3))জন্য xএবং #1=#(1 #(2 #1# 3))জন্য y
6502

5
@ বুরহানখালিদ: প্রথমবারের জন্য ইনস্কেপ এবং দ্বিতীয়টির জন্য গিম্প (কারণ আমি এসভিজিটি ফেলে দিয়েছি)
6502

1
@ চ্যাসারপ্লার: আপনি পাইথনে একটি "অসীম তালিকা" তৈরি করতে পারবেন না কারণ তালিকাগুলি প্রকৃতপক্ষে পুনরায় আকার পরিবর্তনযোগ্য অ্যারে, লিঙ্কযুক্ত তালিকা নয়। এর পরিবর্তে কমন লিস্পে একটি "অসীম তালিকা" তৈরি করা যেতে পারে #1=(1 . #1#)
6502

1
+ আপনি যদি এইর মতো অ্যাকসিআই-চিত্র আঁকতে চান: অসিফ্লো
গ্রিজেশ চৌহান

23

"এর ব্যবহার কী" প্রশ্নটি করার জন্য, এখানে একটি নিখুঁত উদাহরণ দেওয়া হয়েছে।

গ্রাফ হ্রাস হ'ল একটি মূল্যায়ন কৌশল যা কোনও সময় কম্পিউটারের ভাষা ব্যাখ্যা করার জন্য ব্যবহৃত হয়। এটি অলস মূল্যায়নের জন্য একটি সাধারণ কৌশল, বিশেষত কার্যকরী ভাষাগুলির।

প্রারম্ভিক পয়েন্টটি হ'ল প্রোগ্রামটি যে পদক্ষেপগুলি গ্রহণ করবে তার ক্রম উপস্থাপন করে একটি গ্রাফ তৈরি করা। এই প্রোগ্রামটিতে ব্যবহৃত নিয়ন্ত্রণ কাঠামোর উপর নির্ভর করে এটি একটি চক্রাকার গ্রাফের দিকে নিয়ে যেতে পারে (কারণ প্রোগ্রামটিতে কিছু ধরণের "চিরকালের" লুপ থাকে - বা পুনরাবৃত্তি ব্যবহার করুন যার "গভীরতা" মূল্যায়নের সময় জানা যাবে , তবে গ্রাফ- এ নয়) সৃষ্টির সময়) ...

এই জাতীয় গ্রাফ উপস্থাপন করার জন্য আপনার যে যেমন লক্ষ্য করেছেন তার মতো আপনার অসীম "ডেটা স্ট্রাকচার" (যা কখনও কখনও পুনরাবিপন্ন ডেটা স্ট্রাকচার নামে পরিচিত ) প্রয়োজন। সাধারণত, যদিও একটু বেশি জটিল complex

আপনি যদি এই বিষয়ে আগ্রহী হন, তবে এখানে (অনেকের মধ্যে) সেই বিষয়ে একটি বক্তৃতা দেওয়া আছে:
http://undragraduate.csse.uwa.edu.au/units/CITS3211/lectureNotes/14.pdf


7

আমরা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে এটি সর্বদা করি। যদি কোনও দুটি অবজেক্ট প্রত্যক্ষ বা অপ্রত্যক্ষভাবে একে অপরকে নির্দেশ করে তবে সেগুলি উভয়ই অসীম পুনরাবৃত্ত কাঠামো (বা একই সীমাহীন পুনরাবৃত্ত কাঠামোর উভয় অংশ, আপনি এটি কীভাবে দেখুন তার উপর নির্ভর করে)। এজন্য আপনি এটিকে তালিকার মতো আদিম কিছুতে দেখছেন না - কারণ আমরা সাধারণত "অসীম তালিকার" চেয়ে ধারণাকে আন্তঃসংযুক্ত "অবজেক্টস" হিসাবে বর্ণনা করা থেকে ভাল।

আপনি ...অসীম পুনরাবৃত্তির অভিধানেও পেতে পারেন । ধরা যাক আপনি একটি ত্রিভুজের কোণগুলির একটি অভিধান চান, যেখানে প্রতিটি মান সেই কোণার সাথে যুক্ত অন্য কোণগুলির একটি অভিধান। আপনি এটি এই মত সেট আপ করতে পারে:

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

এখন যদি আপনি প্রিন্ট triangle(অথবা aবা bবা cযে বিষয়টি জন্য), আপনি এটা পূর্ণ দেখতে পাবেন {...}কারণ কোন দুটি কোণে একে অপরের সাথে ব্যাক উল্লেখ করা হয়।


a = {}; a['a'] = a; print a['a']['a']['a']
সরল

আমার জন্য, "..." এর পরিবর্তে এটি দেখায় "<আইডির সাথে ডিকের উপর পুনরাবৃত্তি = ___>"
সলোমন উকো

@ সলোমনউকো আপনি সম্ভবত আইপিথন ব্যবহার করছেন যা জিনিসগুলি মুদ্রণের জন্য স্বয়ংক্রিয়ভাবে পিপ্রিন্ট ব্যবহার করে । আপনি %pprintসুন্দর-প্রিন্টিং বন্ধ টগল টাইপ করুন , এটি প্রদর্শিত হবে ...
nmclean

4

আমি যেমন বুঝতে পেরেছি, এটি স্থির পয়েন্টের একটি উদাহরণ

p  = [1, 2]
p[1:1] = [p]
f = lambda x:x[1]
f(p)==p
f(f(p))==p

আমি এটি বুঝতে সক্ষম হইনি। এই কমান্ডগুলি চালনার চেষ্টা করা হয়েছে তবে ত্রুটি রয়েছে।
অসীম বানসাল

@ জেল: ঠিক আছে, আপনাকে পিপি ঘোষণা করার আগে আপনাকে ওপিএস কোড যুক্ত করতে হবে।
ইনকানে

1
@ জেল: আচ্ছা, আমি নিজে নিজে কতটা সহায়ক তা নিশ্চিত নই, তবে ফায়ারগান বলেছেন যে পি (এবং তাই পি [1], [[]] হিসাবে উপস্থাপিত হয়েছে) ফ এর একটি স্থির অবস্থান। আইএমএইচও, এটি "[কী] [...]" প্রশ্নের সম্ভাব্য উত্তর? এক্ষেত্রে.
ইনকানে

1
আমার একই ত্রুটি সমস্যাটি ছিল কারণ সরল p = [1]; p[0] = pউদাহরণ যা f = lambda x:x[0]কাজ করা দরকার তা চেষ্টা করার পরে আমি এই উদাহরণটি চেষ্টা করেছি । এটি একটি ফিক্স পয়েন্টের একটি উদাহরণ, তবে এটি এখনও জেনে রাখা কীভাবে দরকারী তা আমি এখনও দেখতে সক্ষম হইনি। ফিক্স পয়েন্টের আসল মানটি এটি অন্য কোনও পয়েন্ট থেকে পুনরাবৃত্ত বা পুনরুক্তি পদ্ধতিতে পৌঁছে যাচ্ছে। একটি উদাহরণ যা দেখায় যে ওয়াই কম্বিনেটর তৈরি করতে মূল প্রশ্নের তালিকার কাঠামোটি কীভাবে ব্যবহার করা যায় এটি সম্ভব হলে এটি সহায়ক হবে।
ডানসালমো

1
q = lambda: qঅসীম কলযোগ্য
লাম্বদা

-2

সেই বিশেষ বস্তুর নাম এলিপিসিস। আমি অনুমান করি যে এটি পাইথন ইন্টারপ্রেটার / ভিএম-তে সিঙ্গলটন অবজেক্ট হিসাবে প্রয়োগ করা হয়েছে - কিছুই নয় --- প্রকারের প্রেরণিকা like যেমনটি আপনি দেখেছেন এটি পাইথনের পক্ষে নিজের মধ্যে কোনও তালিকার রেফারেন্স উপস্থাপন করার উপায়।


অদ্ভুতভাবে কোনও এলিসিস অবজেক্টকে সরাসরি ইনস্ট্যান্ট করার কোনও উপায় নেই বলে মনে হয়। উদাহরণটি উদাহরণস্বরূপ বিল্টিন ইন্টারফেসের মাধ্যমে নামটি প্রকাশ করা হয়নি। সুতরাং আপনি নির্দিষ্ট ত্রুটি (উত্থাপিত ব্যতিক্রম) এ শব্দটির উল্লেখ দেখতে পাচ্ছেন উদাহরণস্বরূপ যদি আপনি একটি সূচক হিসাবে উপবৃত্ত ব্যবহার করে কোনও আইটেম বের করার চেষ্টা করেন। তবে আপনি কেবল বলতে পারেন: এল = এলিসিস () বা এর মতো কিছুই (যা আমি খুঁজে পেয়েছি)।
জিম ডেনিস

9
এ্যালিসিস অবজেক্টের সাথে আসলে কিছুই করার নেই। এটি কেবল আক্ষরিক স্ট্রিং "[...]", যা মুদ্রণ করা হয় যখন তালিকা মুদ্রণের সময় একটি চক্র সনাক্ত করা হয়। কোড দেখুন: hg.python.org/cpython/file/84d6c1c0665e/Objects/…
জেরেমি শার্প
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.