ক্রম সাবস্ক্রিপশন করার সময় পাইথনে :: (ডাবল কোলন) কী?


263

আমি জানি যে string[3:4]পাইথনে সাবস্ট্রিংয়ের মতো কিছু ব্যবহার করতে পারি , তবে ৩ টি কী বোঝায় somesequence[::3]?


এর আগে কে আসবে এর অর্থ কী :: পছন্দ হয় [5::]। তাহলে 5 এর অর্থ কী?
উমর আসগর

1
[:: ::] এর অর্থ প্রথম উপাদান দিয়ে শুরু করা হবে, দ্বিতীয়টির জন্য কিছুই নয় এবং পরবর্তী উপাদানটি নির্বাচন করুন
গাগান

উত্তর:


243

এর অর্থ 'প্রথম যুক্তির জন্য কিছুই নয়, দ্বিতীয়টির জন্য কিছুই নয়, এবং তিনটি দিয়ে লাফিয়ে' এটি ক্রমের প্রতিটি তৃতীয় আইটেম পায়। বর্ধিত টুকরোটি যা আপনি চান তা। পাইথন ২.৩ এ নতুন


99
এটি [:: - 1]
থাভান

22
এটি প্রতিটি আইটেমকে এমন এক অবস্থানে ফেরত দেয় যা 3 এর একাধিক । 3 * 0 = 0, যেহেতু এটি আইটেম 0 পয়েন্টেও ফিরে আসে উদাহরণস্বরূপ: range(10)[::3]আউটপুটস[0, 3, 6, 9]
রিকি রবিনসন

1
::[এন ::] এর আগে কে আসবে এর অর্থ কী ? তাহলে এর অর্থ কী n?
উমর আসগর

154

পাইথন সিকোয়েন্স স্লাইস অ্যাড্রেসগুলি [সূচনা: শেষ: পদক্ষেপ] হিসাবে লেখা যেতে পারে এবং যে কোনও শুরু, থামানো বা শেষ বাদ দেওয়া যায়। a[::3]ক্রম প্রতিটি তৃতীয় উপাদান।


85

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]

4
পাইথন 3 এ, আপনার উদাহরণ পরিসর (এন) [:: পদক্ষেপ] একটি তালিকা নয়, একটি পরিসীমা অবজেক্ট তৈরি করে। আসলে কী ঘটছে তা দেখতে আপনাকে কোনও তালিকা, এনপি.আরে ইত্যাদি জোর করতে হবে
পিক্যালাক্সাল্ট

57

ব্যাখ্যা

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]

আশ্চর্যজনক উত্তর!
জর্জেন কে।

30

টি এল; ডিআর

এই চাক্ষুষ উদাহরণটি আপনাকে দেখায় যে কীভাবে একটি সুন্দর বিনোদনমূলক উপায়ে (আমি প্রতিশ্রুতি দিচ্ছি) একটি নম্পপি ম্যাট্রিক্সের (2 মাত্রিক অ্যারে) একটি ঝরঝরে নির্বাচনের উপাদানগুলি করবেন to নীচে ২ য় পদক্ষেপ ::প্রশ্নে থাকা "ডাবল কলোন" এর ব্যবহার চিত্রিত করুন ।

(সতর্কতা: এটি ::একাধিক অক্ষের উপাদানগুলির জাম্পিংয়ের জন্য "ডাবল কলোন" ব্যবহারের ক্ষেত্রে চিত্রিত করার লক্ষ্যে একটি NumPy অ্যারে নির্দিষ্ট উদাহরণ This উদাহরণটি পাইথনের ডেটা স্ট্রাকচারের মতো নয় List)।

তাদের সকলকে শাসনের একটি দৃ concrete় উদাহরণ ...

বলুন আমাদের কাছে একটি 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-পদক্ষেপের পদ্ধতিতে করতে পারি)

পদক্ষেপ 1 - সাবসেট প্রাপ্ত করুন

সারি-ভিত্তিক এবং কলাম-ভিত্তিক উভয় দিকনির্দেশেই "শুরু সূচক" এবং "শেষ সূচক" নির্দিষ্ট করুন।

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

কোডে:

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]])

এখন লক্ষ্য করুন যে আমরা সহজ সূচনা এবং শেষ সূচক কৌশলটি ব্যবহার করে সবেমাত্র আমাদের উপসেটটি পেয়েছি। পরবর্তী, কীভাবে এটি "জাম্পিং" করবেন ... (পড়ুন!)

পদক্ষেপ 2 - উপাদান নির্বাচন করুন ("জাম্প স্টেপ" যুক্তি সহ)

আমরা এখন সারি-ভিত্তিক এবং কলাম-ভিত্তিক উভয় দিকনির্দেশে ("জাম্পিং" উপায়ে উপাদান নির্বাচন করতে) "লাফানো পদক্ষেপগুলি" নির্দিষ্ট করতে পারি:

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

কোডে (ডাবল কলোনগুলি নোট করুন):

In [7]: X3 = X2[::3, ::2]

In [8]: X3
Out[8]:
array([[23, 25, 27],
       [53, 55, 57],
       [83, 85, 87]])

আমরা কেবলমাত্র প্রয়োজনীয় সমস্ত উপাদান নির্বাচন করেছি! :)

 একত্রীকরণের পদক্ষেপ 1 (শুরু এবং শেষ) এবং দ্বিতীয় ধাপ ("জাম্পিং")

সংক্ষিপ্ততার জন্য এখন আমরা ধারণাটি জানি, আমরা সহজেই একত্রীকৃত পদক্ষেপের মধ্যে ধাপ 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]])

সম্পন্ন!


আমি যদি সেই চিহ্নযুক্ত এন্ট্রিগুলিকে প্রত্যেকটি আসল অবজেক্টে 0 তে সেট করতে চাই? কীভাবে এগিয়ে যাব?
ব্যবহারকারী 1211030

1
একটি করুন X[2:9,3:8][::3,::2] = 0 (চিহ্নিত এন্ট্রিগুলিকে 0 এ প্রতিস্থাপন করতে)। আপনি যদি Xআবার টাইপ করেন তবে দেখতে পাবেন যে সমস্ত চিহ্নিত চিহ্নিত এন্ট্রি এখন সেট করা আছে 0
আটলাস

15

পাইথনে টুকরো টুকরো করার সময় তৃতীয় প্যারামিটারটি ধাপ। অন্যরা যেমন উল্লেখ করেছে, একটি সুন্দর ওভারভিউয়ের জন্য বর্ধিত স্লাইসগুলি দেখুন ।

এই জ্ঞানের সাথে, [::3]কেবলমাত্র আপনি নিজের স্লাইসের জন্য কোনও সূচনা বা শেষ সূচকগুলি নির্দিষ্ট করে নি। যেহেতু আপনি একটি পদক্ষেপ নির্দিষ্ট করেছেন, সুতরাং এটি প্রথম সূচকে শুরু 3করে প্রতি তৃতীয় এন্ট্রি নেবে something। উদাহরণ স্বরূপ:

>>> '123123123'[::3]
'111'

7

আপনি নিজের কাস্টম ক্লাসে এই স্বরলিপিটি ব্যবহার করতে পারেন এটি যা করতে চান তা করতে

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আরও এখানে আচ্ছাদিত করা হয়: এলিসপিস অবজেক্টটি কী করে?


6

তৃতীয় প্যারামিটারটি পদক্ষেপ। সুতরাং [:: 3] তালিকা / স্ট্রিংয়ের প্রতিটি তৃতীয় উপাদান ফিরে আসবে।


4

পাইথন :: ব্যবহার করে শেষ, সূচনা এবং পদক্ষেপের মান পৃথক করতে।


1
এটি আসলে সহায়ক হওয়ার জন্য যথেষ্ট বিশদ সরবরাহ করে না।
bstpierre

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