'example'[999:9999]ত্রুটির কারণ হয় না কেন ? যেহেতু 'example'[9]করে, এর পিছনে অনুপ্রেরণা কী?
এই আচরণ থেকে আমি ধরে নিতে পারি যে 'example'[3], মূলত / অভ্যন্তরীণভাবে একই নয় 'example'[3:4], যদিও উভয়ই একই 'm'স্ট্রিংয়ের ফলস্বরূপ ।
'example'[999:9999]ত্রুটির কারণ হয় না কেন ? যেহেতু 'example'[9]করে, এর পিছনে অনুপ্রেরণা কী?
এই আচরণ থেকে আমি ধরে নিতে পারি যে 'example'[3], মূলত / অভ্যন্তরীণভাবে একই নয় 'example'[3:4], যদিও উভয়ই একই 'm'স্ট্রিংয়ের ফলস্বরূপ ।
উত্তর:
আপনি সঠিক! 'example'[3:4]এবং 'example'[3]মৌলিকভাবে পৃথক, এবং সিকোয়েন্সের সীমানার বাইরে কাটা (অন্তত বিল্ট-ইনগুলির জন্য) কোনও ত্রুটির কারণ করে না।
এটি প্রথমে অবাক হতে পারে তবে আপনি যখন এটি সম্পর্কে চিন্তা করেন তখন তা বোধগম্য হয়। সূচীকরণ একটি একক আইটেম ফেরত দেয়, তবে স্লাইসিং আইটেমগুলির একটি অনুগতি প্রদান করে। সুতরাং যখন আপনি একটি অস্তিত্বের মানকে সূচী করার চেষ্টা করবেন তখন ফিরে আসার মতো কিছুই নেই। তবে আপনি যখন সীমাগুলির বাইরে কোনও সিকোয়েন্স টুকরো টুকরো টুকরো টুকরো করে ফেলেন তখনও আপনি খালি ক্রমটি ফিরে আসতে পারেন।
এখানে বিভ্রান্ত করার একটি অংশ হ'ল স্ট্রিংগুলি তালিকা থেকে কিছুটা আলাদা আচরণ করে। আপনি যখন তালিকায় একই জিনিসটি করেন তখন কী হয় তা দেখুন:
>>> [0, 1, 2, 3, 4, 5][3]
3
>>> [0, 1, 2, 3, 4, 5][3:4]
[3]
এখানে পার্থক্য সুস্পষ্ট। স্ট্রিংয়ের ক্ষেত্রে, ফলাফলগুলি অভিন্ন বলে মনে হয় কারণ পাইথনে, স্ট্রিংয়ের বাইরে স্বতন্ত্র চরিত্রের মতো কিছুই নেই। একটি একক অক্ষর কেবল 1-অক্ষরের স্ট্রিং।
(সিকোয়েন্সের ব্যাপ্তির বাইরে স্লাইসিংয়ের সঠিক শব্দার্থবিজ্ঞানের জন্য, মিলিগ্রামের উত্তর দেখুন ))
Noneপরিবর্তে ফিরে আসতে পারত - এটাই স্বাভাবিক পাইথন কনভেনশন যখন আপনার কাছে ফিরে আসার মতো কিছুই নেই।
Noneএই ক্ষেত্রে ফিরে আসার ফলে একটি সীমার বাইরে থাকা সূচি এবং Noneতালিকার অভ্যন্তরের একটি মানের মধ্যে বলা শক্ত হয়ে যায় । তবে এর জন্য যদি কোনও কর্মক্ষেত্র ছিল, তবুও এটি আমার কাছে স্পষ্ট রয়েছে যে একটি ফাঁকা সিক্যুয়েন্স ফিরিয়ে দেওয়া যখন সীমা ছাড়িয়ে যায় তখন স্লাইস দেওয়া উচিত do এটি দুটি বিতর্কিত সেটগুলির ইউনিয়ন সম্পাদনের অনুরূপ।
Noneএকটি তালিকাতে মানগুলি সম্পর্কে আপনার পয়েন্টটি দেখছি ।
ডকুমেন্টেশনের একটি শক্তিশালী বিভাগে একটি উত্তর যুক্ত করার জন্য :
একটি স্লাইস এক্সপ্রেশন যেমন দেওয়া হয়েছে s[i:j:k],
ফালি গুলি থেকে আমি করতে ঞ ধাপ ট সূচক আইটেম ক্রম হিসাবে সংজ্ঞায়িত করা হয়
x = i + n*kযেমন যে0 <= n < (j-i)/k। অন্য কথায়, সূচকের হয়i,i+k,i+2*k,i+3*kএবং তাই, বাঁধন যখন ঞ উপনিত (কিন্তু কখনোই সহ ঞ )। যখন কে ধনাত্মক হয়, i এবং jlen(s)এর চেয়ে বেশি হলে হ্রাস করা হয়
যদি আপনি লিখতে s[999:9999], পাইথন ফিরে আসছে s[len(s):len(s)]যেহেতু len(s) < 999এবং আপনার পদক্ষেপ ইতিবাচক ( 1- ডিফল্ট)।
kইতিবাচক হয়, iএবং যখন তারা কম jহয় -len(s)তখন বাড়ানোও হয়? যেমনs = 'bac'; s[-100:2] == s[-len(s):2]
kইতিবাচক হয়, পাইথন স্কেল করবে iএবং jযাতে তারা ক্রমের সীমানা মাপসই করে। আপনার উদাহরণে, s[-100:2] == s[0:2]( == s[-len(s):2]উপায় দ্বারা)। একইভাবে s[-100:100] == s[0:2],।
স্লাইসিং অন্তর্নির্মিত ধরণের দ্বারা সীমা-পরীক্ষা করা হয় না। এবং যদিও আপনার উভয় উদাহরণের একই ফলাফল রয়েছে বলে মনে হয়, তারা ভিন্নভাবে কাজ করে; পরিবর্তে একটি তালিকা দিয়ে তাদের চেষ্টা করুন।
[999:9999]কোনও সূচক নয়, এটি একটি স্লাইস এবং এর বিভিন্ন শব্দার্থক শব্দ রয়েছে। পাইথনের পরিচিতি থেকে: "স্লাইস সূচকগুলি হস্তান্তরিতভাবে করণীয় দ্বারা পরিচালনা করা হয়: একটি সূচক যা খুব বড় সেগুলি স্ট্রিং আকার দ্বারা প্রতিস্থাপিত হয়, নীচের গণ্ডির চেয়ে ছোট একটি উপরের সীমা খালি স্ট্রিং প্রদান করে" "