এর মানে কি?


97

আমি কিছু পাইথন কোড বিশ্লেষণ করছি এবং আমি জানি না

pop = population[:]

মানে। এটি জাভাতে অ্যারের তালিকার মতো বা দ্বি-মাত্রিক অ্যারের মতো কিছু?


4
সম্পর্কিত, তালিকা সাফ করা কেবলমাত্র ডেল পপ [:] বা পপ [:] = [] না করে পপ ক্লেয়ার () হিসাবে .. (যেমন আপনি ডিক্টস দিয়ে করেন) করেই সম্ভব।
ম্যাক

পাইথনের টুকরো সম্পর্কে ভাল আলোচনা: স্ট্যাকওভারফ্লো.com
স্কট সি উইলসন

@ ম্যাক: দ্রষ্টব্য: পাইথন ৩.৩ হিসাবে, listসরবরাহ clearএবং copyপদ্ধতিগুলি যথাক্রমে করা del mylist[:]বা সমান করার সমান mylist[:]। এগুলি সাধারণভাবে পরিবর্তনীয় ক্রমগুলির জন্য প্রয়োজন হয় না, তাই আপনি যদি একটি স্বেচ্ছাসেবী পরিবর্তনযোগ্য ক্রম পেতে পারেন তবে আপনি স্লাইস ভিত্তিক ক্রিয়াকলাপগুলিতে আটকে থাকতে চাইবেন তবে নামকরণ পদ্ধতিগুলি অন্তত উপলব্ধ list
শ্যাডোর্যাঞ্জার

@ শ্যাডোএ্যাঞ্জার হ্যাঁ, 9 বছর পরে। :-)
মক্কে

উত্তর:


111

এটি স্লাইস নোটেশনের একটি উদাহরণ এবং এটি কী করে তা নির্ভর করে population। যদি populationএকটি তালিকা থাকে তবে এই লাইনটি তালিকার একটি অগভীর অনুলিপি তৈরি করবে । টাইপ tupleবা a এর কোনও অবজেক্টের জন্য str, এটি কিছুই করবে না (লাইনটি ছাড়া এটি একই রকম করবে [:]) এবং একটি (বলুন) NumPy অ্যারের জন্য, এটি একই ডেটাতে একটি নতুন ভিউ তৈরি করবে।


14
কেবলমাত্র ক্ষেত্রে: স্লাইস একটি অগভীর অনুলিপি প্রদান করে।
আন্দ্রে ক্যারন

4
@ মিলিয়াস: সম্ভবত l.copy()আরও পাঠযোগ্য, তবে এটি কার্যকর হবে না।
সোভেন মারনাচ

13
list(l)সর্বদা কাজ করে, আরও পঠনযোগ্য এবং এর মতো কিছু দিয়ে একটি অনুলিপি ফেরত দেওয়ার নিশ্চয়তাও রয়েছেnumpy.array
রোশ অক্সিমারন

4
@Eli: হ্যাঁ, পাশাপাশি list.clear()। এটি কিছু সময় নেবে, যদিও এটি এসও-তে এই ধরণের প্রশ্নগুলির উল্লেখযোগ্য হ্রাস ঘটাবে। :)
সোভেন মারনাচ

4
@ মিশেলগ্র্যাসিক: আমি ধরে নিয়েছি আপনি এখানে নম্পপি অ্যারে নিয়ে কথা বলছেন। ব্যবহার না করে A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)], আমি প্রায় সবসময় পছন্দ করি numpy.rollaxis(A, axis, 0)[k]। সাধারণভাবে, আমি খুব কমই এমন ব্যবহারের মুখোমুখি হয়েছি যেখানে আপনাকে সরাসরি slice()অবজেক্ট তৈরি করতে হবে । আপনার যদি যাইহোক তাদের প্রয়োজন হয় তবে নুমপি s_সাহায্যকারীকে তাদের তৈরি করার বিকল্প উপায় হিসাবে সরবরাহ করে।
সোভেন মার্নাচ

28

এটি জানতেও সাহায্য করতে পারে যে সাধারণভাবে একটি তালিকা স্লাইস তালিকার একটি অংশের একটি অনুলিপি তৈরি করে। উদাহরণস্বরূপ population[2:4]জনসংখ্যা [2] এবং জনসংখ্যা [3] (স্লাইসিং ডান-এক্সক্লুসিভ) সমেত একটি তালিকা ফিরিয়ে দেবে। বাম এবং ডান সূচকটি population[:]যথাক্রমে 0 এবং দৈর্ঘ্যের (জনসংখ্যার) হিসাবে রেখে পুরো তালিকাটি নির্বাচন করে away সুতরাং এটি একটি অনুলিপি একটি তালিকার একটি অনুলিপি করা।


15

ভাল ... এটি সত্যিই প্রসঙ্গে নির্ভর করে। পরিশেষে, এটি একটি পাসের sliceবস্তু ( slice(None,None,None): নিম্নলিখিত পদ্ধতি এক করা) __getitem__, __setitem__অথবা __delitem__। (প্রকৃতপক্ষে, যদি অবজেক্টটির একটি থাকে তবে এটি __getslice__পরিবর্তে ব্যবহৃত হবে __getitem__, তবে এটি এখন অবচয় করা হয়েছে এবং এটি ব্যবহার করা উচিত নয়)।

বস্তুগুলি স্লাইসের সাহায্যে তারা যা চায় তা করতে পারে।

এর প্রেক্ষাপটে:

x = obj[:]

এটি obj.__getitem__পাস করা স্লাইস অবজেক্টের সাথে কল করবে In বাস্তবে এটি সম্পূর্ণরূপে সমান:

x = obj[slice(None,None,None)]

(যদিও প্রাক্তন সম্ভবত আরও দক্ষ কারণ এটি sliceনির্মাণকারীর সন্ধান করতে হবে না - এটি সমস্ত বাইটকোডে সম্পন্ন হয়েছে)।

বেশিরভাগ অবজেক্টের জন্য, এটি ক্রমের একটি অংশের অগভীর অনুলিপি তৈরির উপায়।

পরবর্তী:

x[:] = obj

__setitem__উপর ভিত্তি করে আইটেম সেট করার একটি উপায় (এটি কল করে ) obj

এবং, আমি মনে করি আপনি সম্ভবত কি অনুমান করতে পারেন:

del x[:]

কল ;-)।

আপনি বিভিন্ন স্লাইস পাস করতে পারেন:

x[1:4]

নির্মাণ slice(1,4,None)

x[::-1]

নির্মাণ slice(None,None,-1)এবং তাই এগিয়ে। আরও পড়ুন: পাইথনের স্লাইস নোটেশন ব্যাখ্যা করুন



6

এটি তালিকার একটি অনুলিপি তৈরি করে, ইতিমধ্যে বিদ্যমান তালিকার জন্য কেবল নতুন নাম নির্ধারণ করে।


5

[:]
অ্যারেতে সীমিতকরণ বা টুকরো টুকরো করার জন্য ব্যবহৃত হয়,
যেমন: হ্যাশ উদাহরণস্বরূপ:
[1: 5] 1 অন্তর্ভুক্ত এবং 5 একচেটিয়া অর্থাত্ 1-4
[শুরু: শেষ]

স্লাইসিংয়ের জন্য অ্যারেতে মূলত ব্যবহৃত হয়, বন্ধনী বুঝতে পারছেন এর অর্থ পরিবর্তনশীল মান বা প্রদর্শনের জন্য কী এবং ":" প্যাকেটে পুরো অ্যারে সীমাবদ্ধ বা টুকরো টুকরো করার জন্য ব্যবহৃত হয়।


4
ইতিমধ্যে 5 টি একই উত্তর এবং এমনকি একটি স্বীকৃত উত্তর রয়েছে এমন কোনও পুরানো প্রশ্নটিকে ঘায়েল করার কোনও কারণ নেই ... এছাড়াও, a[1:5]উপাদানগুলি 2-4 নয়, 1-4 প্রদান করে।
স্কামাহ ওয়ান

@ স্কামাঃ ওহ আমি জানি না। হয়তো এই ক্ষেত্রে না হলেও এমন সময় রয়েছে যেখানে মৃত প্রশ্ন উত্থাপন করা মূল্যবান হতে পারে। বিভিন্ন অন্তর্দৃষ্টি, পৃথক শব্দ ইত্যাদি। এক্ষেত্রে আপনি উত্তরটি সংশোধন করেছেন এবং তারা আশাবাদীও কিছু শিখলেন।
প্রাইফটান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.