উত্তর:
এর অর্থ 'প্রথম যুক্তির জন্য কিছুই নয়, দ্বিতীয়টির জন্য কিছুই নয়, এবং তিনটি দিয়ে লাফিয়ে' এটি ক্রমের প্রতিটি তৃতীয় আইটেম পায়। বর্ধিত টুকরোটি যা আপনি চান তা। পাইথন ২.৩ এ নতুন
range(10)[::3]
আউটপুটস[0, 3, 6, 9]
::
[এন ::] এর আগে কে আসবে এর অর্থ কী ? তাহলে এর অর্থ কী n
?
seq[::n]
n
সম্পূর্ণ অনুক্রমের প্রতিটি- তম আইটেমের ক্রম।
উদাহরণ:
>>> range(10)[::2]
[0, 2, 4, 6, 8]
বাক্য গঠনটি হ'ল:
seq[start:end:step]
সুতরাং আপনি এটি করতে পারেন:
>>> range(100)[5:18:2]
[5, 7, 9, 11, 13, 15, 17]
s[i:j:k]
হল ডকুমেন্টেশন অনুযায়ী , "পদক্ষেপ ট সঙ্গে ঞ আমি থেকে s এর ফালি"। যখন i
এবং j
অনুপস্থিত থাকে, পুরো ক্রমটি অনুমিত হয় এবং এর s[::k]
অর্থ "প্রতিটি কে-থেম আইটেম"।
প্রথমে একটি তালিকা শুরু করা যাক:
>>> s = range(20)
>>> s
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
আসুন প্রতি 3 তম আইটেম থেকে নেওয়া যাক s
:
>>> s[::3]
[0, 3, 6, 9, 12, 15, 18]
আসুন প্রতি 3 তম আইটেম থেকে নেওয়া যাক s[2:]
:
>>> s[2:]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> s[2::3]
[2, 5, 8, 11, 14, 17]
আসুন প্রতি 3 তম আইটেম থেকে নেওয়া যাক s[5:12]
:
>>> s[5:12]
[5, 6, 7, 8, 9, 10, 11]
>>> s[5:12:3]
[5, 8, 11]
আসুন প্রতি 3 তম আইটেম থেকে নেওয়া যাক s[:10]
:
>>> s[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> s[:10:3]
[0, 3, 6, 9]
এই চাক্ষুষ উদাহরণটি আপনাকে দেখায় যে কীভাবে একটি সুন্দর বিনোদনমূলক উপায়ে (আমি প্রতিশ্রুতি দিচ্ছি) একটি নম্পপি ম্যাট্রিক্সের (2 মাত্রিক অ্যারে) একটি ঝরঝরে নির্বাচনের উপাদানগুলি করবেন to নীচে ২ য় পদক্ষেপ ::
প্রশ্নে থাকা "ডাবল কলোন" এর ব্যবহার চিত্রিত করুন ।
(সতর্কতা: এটি ::
একাধিক অক্ষের উপাদানগুলির জাম্পিংয়ের জন্য "ডাবল কলোন" ব্যবহারের ক্ষেত্রে চিত্রিত করার লক্ষ্যে একটি NumPy অ্যারে নির্দিষ্ট উদাহরণ This উদাহরণটি পাইথনের ডেটা স্ট্রাকচারের মতো নয় List
)।
বলুন আমাদের কাছে একটি NumPy ম্যাট্রিক্স রয়েছে যা দেখতে এরকম দেখাচ্ছে:
In [1]: import numpy as np
In [2]: X = np.arange(100).reshape(10,10)
In [3]: X
Out[3]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
কোনও কারণে বলুন, আপনার বস আপনাকে নিম্নলিখিত উপাদানগুলি নির্বাচন করতে চান:
"তবে কেমন ???" ... পড়ুন! (আমরা এটি 2-পদক্ষেপের পদ্ধতিতে করতে পারি)
সারি-ভিত্তিক এবং কলাম-ভিত্তিক উভয় দিকনির্দেশেই "শুরু সূচক" এবং "শেষ সূচক" নির্দিষ্ট করুন।
কোডে:
In [5]: X2 = X[2:9,3:8]
In [6]: X2
Out[6]:
array([[23, 24, 25, 26, 27],
[33, 34, 35, 36, 37],
[43, 44, 45, 46, 47],
[53, 54, 55, 56, 57],
[63, 64, 65, 66, 67],
[73, 74, 75, 76, 77],
[83, 84, 85, 86, 87]])
এখন লক্ষ্য করুন যে আমরা সহজ সূচনা এবং শেষ সূচক কৌশলটি ব্যবহার করে সবেমাত্র আমাদের উপসেটটি পেয়েছি। পরবর্তী, কীভাবে এটি "জাম্পিং" করবেন ... (পড়ুন!)
আমরা এখন সারি-ভিত্তিক এবং কলাম-ভিত্তিক উভয় দিকনির্দেশে ("জাম্পিং" উপায়ে উপাদান নির্বাচন করতে) "লাফানো পদক্ষেপগুলি" নির্দিষ্ট করতে পারি:
কোডে (ডাবল কলোনগুলি নোট করুন):
In [7]: X3 = X2[::3, ::2]
In [8]: X3
Out[8]:
array([[23, 25, 27],
[53, 55, 57],
[83, 85, 87]])
আমরা কেবলমাত্র প্রয়োজনীয় সমস্ত উপাদান নির্বাচন করেছি! :)
সংক্ষিপ্ততার জন্য এখন আমরা ধারণাটি জানি, আমরা সহজেই একত্রীকৃত পদক্ষেপের মধ্যে ধাপ 1 এবং পদক্ষেপ 2 একত্রিত করতে পারি:
In [9]: X4 = X[2:9,3:8][::3,::2]
In [10]: X4
Out[10]:
array([[23, 25, 27],
[53, 55, 57],
[83, 85, 87]])
সম্পন্ন!
X[2:9,3:8][::3,::2] = 0
(চিহ্নিত এন্ট্রিগুলিকে 0 এ প্রতিস্থাপন করতে)। আপনি যদি X
আবার টাইপ করেন তবে দেখতে পাবেন যে সমস্ত চিহ্নিত চিহ্নিত এন্ট্রি এখন সেট করা আছে 0
।
পাইথনে টুকরো টুকরো করার সময় তৃতীয় প্যারামিটারটি ধাপ। অন্যরা যেমন উল্লেখ করেছে, একটি সুন্দর ওভারভিউয়ের জন্য বর্ধিত স্লাইসগুলি দেখুন ।
এই জ্ঞানের সাথে, [::3]
কেবলমাত্র আপনি নিজের স্লাইসের জন্য কোনও সূচনা বা শেষ সূচকগুলি নির্দিষ্ট করে নি। যেহেতু আপনি একটি পদক্ষেপ নির্দিষ্ট করেছেন, সুতরাং এটি প্রথম সূচকে শুরু 3
করে প্রতি তৃতীয় এন্ট্রি নেবে something
। উদাহরণ স্বরূপ:
>>> '123123123'[::3]
'111'
আপনি নিজের কাস্টম ক্লাসে এই স্বরলিপিটি ব্যবহার করতে পারেন এটি যা করতে চান তা করতে
class C(object):
def __getitem__(self, k):
return k
# Single argument is passed directly.
assert C()[0] == 0
# Multiple indices generate a tuple.
assert C()[0, 1] == (0, 1)
# Slice notation generates a slice object.
assert C()[1:2:3] == slice(1, 2, 3)
# If you omit any part of the slice notation, it becomes None.
assert C()[:] == slice(None, None, None)
assert C()[::] == slice(None, None, None)
assert C()[1::] == slice(1, None, None)
assert C()[:2:] == slice(None, 2, None)
assert C()[::3] == slice(None, None, 3)
# Tuple with a slice object:
assert C()[:, 1] == (slice(None, None, None), 1)
# Ellipsis class object.
assert C()[...] == Ellipsis
এরপরে আমরা স্লাইস অবজেক্টগুলি এইভাবে খুলতে পারি:
s = slice(1, 2, 3)
assert s.start == 1
assert s.stop == 2
assert s.step == 3
এটি উল্লেখযোগ্যভাবে কোনও দিকের বহু-মাত্রিক অ্যারেগুলি কাটাতে নিম্পিতে ব্যবহৃত হয়।
অবশ্যই, কোনও বুদ্ধিমান এপিআই ::3
এর স্বাভাবিক "প্রতি 3" শব্দার্থক ব্যবহার করা উচিত ।
সম্পর্কিত Ellipsis
আরও এখানে আচ্ছাদিত করা হয়: এলিসপিস অবজেক্টটি কী করে?
[5::]
। তাহলে 5 এর অর্থ কী?