কেন সূচকের সাথে স্ট্রাস্টিং স্লাইসিংয়ের পরিসীমা কাজ করে না?


90

'example'[999:9999]ত্রুটির কারণ হয় না কেন ? যেহেতু 'example'[9]করে, এর পিছনে অনুপ্রেরণা কী?

এই আচরণ থেকে আমি ধরে নিতে পারি যে 'example'[3], মূলত / অভ্যন্তরীণভাবে একই নয় 'example'[3:4], যদিও উভয়ই একই 'm'স্ট্রিংয়ের ফলস্বরূপ ।


17
[999:9999]কোনও সূচক নয়, এটি একটি স্লাইস এবং এর বিভিন্ন শব্দার্থক শব্দ রয়েছে। পাইথনের পরিচিতি থেকে: "স্লাইস সূচকগুলি হস্তান্তরিতভাবে করণীয় দ্বারা পরিচালনা করা হয়: একটি সূচক যা খুব বড় সেগুলি স্ট্রিং আকার দ্বারা প্রতিস্থাপিত হয়, নীচের গণ্ডির চেয়ে ছোট একটি উপরের সীমা খালি স্ট্রিং প্রদান করে" "
উবল 24

4
@Wooble এটাই আসল উত্তর
jondavidjohn

4
@ উবলি এবং আপনি কি জানেন যে এটি কেন এভাবে? আপনার ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ।
ijverig

কেন? আপনাকে গাইডোকে জিজ্ঞাসা করতে হবে, তবে আমি মনে করি যে এটি একটি টুকরো ধরে রাখতে সক্ষম হবেন মার্জিত এটি সবসময় মূল ক্রম হিসাবে একই ধরণের ক্রম হয়।
উবল 24

4
@ ল্যাপিনট হ্যাঁ আমি কোড লিখেছি যা এই আচরণের উপর নির্ভর করে। দুর্ভাগ্যক্রমে আমি সঠিক কোডটি মনে করতে পারি না তাই আমি আপনাকে কেন বলতে পারব না। সম্ভবত সাবস্ট্রিংগুলির সাথে করণীয় ছিল; খালি স্ট্রিং পাওয়া আপনি সময়ে যা চান ঠিক তা হতে পারে।
মার্ক রান্সম

উত্তর:


69

আপনি সঠিক! 'example'[3:4]এবং 'example'[3]মৌলিকভাবে পৃথক, এবং সিকোয়েন্সের সীমানার বাইরে কাটা (অন্তত বিল্ট-ইনগুলির জন্য) কোনও ত্রুটির কারণ করে না।

এটি প্রথমে অবাক হতে পারে তবে আপনি যখন এটি সম্পর্কে চিন্তা করেন তখন তা বোধগম্য হয়। সূচীকরণ একটি একক আইটেম ফেরত দেয়, তবে স্লাইসিং আইটেমগুলির একটি অনুগতি প্রদান করে। সুতরাং যখন আপনি একটি অস্তিত্বের মানকে সূচী করার চেষ্টা করবেন তখন ফিরে আসার মতো কিছুই নেই। তবে আপনি যখন সীমাগুলির বাইরে কোনও সিকোয়েন্স টুকরো টুকরো টুকরো টুকরো করে ফেলেন তখনও আপনি খালি ক্রমটি ফিরে আসতে পারেন।

এখানে বিভ্রান্ত করার একটি অংশ হ'ল স্ট্রিংগুলি তালিকা থেকে কিছুটা আলাদা আচরণ করে। আপনি যখন তালিকায় একই জিনিসটি করেন তখন কী হয় তা দেখুন:

>>> [0, 1, 2, 3, 4, 5][3]
3
>>> [0, 1, 2, 3, 4, 5][3:4]
[3]

এখানে পার্থক্য সুস্পষ্ট। স্ট্রিংয়ের ক্ষেত্রে, ফলাফলগুলি অভিন্ন বলে মনে হয় কারণ পাইথনে, স্ট্রিংয়ের বাইরে স্বতন্ত্র চরিত্রের মতো কিছুই নেই। একটি একক অক্ষর কেবল 1-অক্ষরের স্ট্রিং।

(সিকোয়েন্সের ব্যাপ্তির বাইরে স্লাইসিংয়ের সঠিক শব্দার্থবিজ্ঞানের জন্য, মিলিগ্রামের উত্তর দেখুন ))


4
সীমানার বাইরে থাকা কোনও সূচি ভুল হওয়ার Noneপরিবর্তে ফিরে আসতে পারত - এটাই স্বাভাবিক পাইথন কনভেনশন যখন আপনার কাছে ফিরে আসার মতো কিছুই নেই।
মার্ক রান্সম

8
@ মার্কারান্সম, এটি সত্য; তবে Noneএই ক্ষেত্রে ফিরে আসার ফলে একটি সীমার বাইরে থাকা সূচি এবং Noneতালিকার অভ্যন্তরের একটি মানের মধ্যে বলা শক্ত হয়ে যায় । তবে এর জন্য যদি কোনও কর্মক্ষেত্র ছিল, তবুও এটি আমার কাছে স্পষ্ট রয়েছে যে একটি ফাঁকা সিক্যুয়েন্স ফিরিয়ে দেওয়া যখন সীমা ছাড়িয়ে যায় তখন স্লাইস দেওয়া উচিত do এটি দুটি বিতর্কিত সেটগুলির ইউনিয়ন সম্পাদনের অনুরূপ।
প্রেরক

শুধু পরিষ্কার বলতে গেলে, আমি বলিনি যে আপনি ভুল ছিলেন were আমি Noneএকটি তালিকাতে মানগুলি সম্পর্কে আপনার পয়েন্টটি দেখছি ।
মার্ক রান্সম

4
@ মার্করানসম, আমি জানি - আমি যদি আত্মরক্ষামূলক মনে করি তবে দুঃখিত। সত্যই আমি কেবল তত্ত্ব সেট করার জন্য একটি অজুহাত চেয়েছিলাম :)।
প্রেরক

4
ওহ, আমি "ছেদ" এর পরিবর্তে "ইউনিয়ন" বলেছিলাম।
প্রেরক 14

33

ডকুমেন্টেশনের একটি শক্তিশালী বিভাগে একটি উত্তর যুক্ত করার জন্য :

একটি স্লাইস এক্সপ্রেশন যেমন দেওয়া হয়েছে 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]
Chris_Rands

@ ক্রিস_র্যান্ডস যখন kইতিবাচক হয়, পাইথন স্কেল করবে iএবং jযাতে তারা ক্রমের সীমানা মাপসই করে। আপনার উদাহরণে, s[-100:2] == s[0:2]( == s[-len(s):2]উপায় দ্বারা)। একইভাবে s[-100:100] == s[0:2],।
tylerc0816

সুন্দর ধন্যবাদ. এটি উপরে @ স্পিডপ্লেনের মন্তব্যে একটি ভাল প্রতিক্রিয়া।
প্রেরক 18

8

স্লাইসিং অন্তর্নির্মিত ধরণের দ্বারা সীমা-পরীক্ষা করা হয় না। এবং যদিও আপনার উভয় উদাহরণের একই ফলাফল রয়েছে বলে মনে হয়, তারা ভিন্নভাবে কাজ করে; পরিবর্তে একটি তালিকা দিয়ে তাদের চেষ্টা করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.