আমি কীভাবে itertools.groupby () ব্যবহার করব?


506

পাইথনের itertools.groupby()ফাংশনটি কীভাবে ব্যবহার করা যায় তার একটি বোধগম্য ব্যাখ্যা আমি খুঁজে পাইনি । আমি যা করার চেষ্টা করছি তা হ'ল:

  • একটি তালিকা নিন - এই ক্ষেত্রে, আপত্তিজনক lxmlউপাদানগুলির বাচ্চারা
  • কিছু মানদণ্ডের ভিত্তিতে এটিকে দলে ভাগ করুন
  • তারপরে এই গ্রুপগুলির প্রতিটি পৃথকভাবে পুনরাবৃত্তি করুন।

আমি ডকুমেন্টেশন এবং উদাহরণগুলি পর্যালোচনা করেছি , তবে সংখ্যার একটি সাধারণ তালিকা ছাড়িয়ে এগুলি প্রয়োগ করার চেষ্টা করতে আমার সমস্যা হয়েছে।

সুতরাং, আমি কীভাবে ব্যবহার করব itertools.groupby()? আমার অন্য কোন কৌশলটি ব্যবহার করা উচিত? ভাল "পূর্বশর্ত" পড়ার পয়েন্টারগুলিও প্রশংসা করবে।


এই ক্ষেত্রে একটি কার্যকর কেস হবে লেটকোড
প্রব্লেমস

উত্তর:


655

গুরুত্বপূর্ণ দ্রষ্টব্য: আপনাকে প্রথমে আপনার ডেটা বাছাই করতে হবে


যে অংশটি আমি পাইনি তা উদাহরণস্বরূপ নির্মাণে

groups = []
uniquekeys = []
for k, g in groupby(data, keyfunc):
   groups.append(list(g))    # Store group iterator as a list
   uniquekeys.append(k)

kবর্তমানের গ্রুপিং কী এবং gএটি এমন একটি পুনরুক্তি যা আপনি সেই গ্রুপিং কী দ্বারা সংজ্ঞায়িত গোষ্ঠীতে পুনরাবৃত্তি করতে ব্যবহার করতে পারেন। অন্য কথায়, groupbyপুনরাবৃত্তকারী নিজেই পুনরাবৃত্তিকে ফেরত দেয়।

এখানে সুস্পষ্ট ভেরিয়েবলের নাম ব্যবহার করে এর একটি উদাহরণ এখানে দেওয়া হয়েছে:

from itertools import groupby

things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "speed boat"), ("vehicle", "school bus")]

for key, group in groupby(things, lambda x: x[0]):
    for thing in group:
        print "A %s is a %s." % (thing[1], key)
    print " "

এটি আপনাকে আউটপুট দেবে:

ভাল্লুক একটি প্রাণী।
হাঁস একটি প্রাণী।

ক্যাকটাস একটি উদ্ভিদ।

একটি স্পিড বোট একটি বাহন is
একটি স্কুল বাস একটি গাড়ী।

এই উদাহরণস্বরূপ, thingsটিউপলগুলির একটি তালিকা যেখানে প্রতিটি টিপলিতে প্রথম আইটেমটি দ্বিতীয় আইটেমের সাথে সম্পর্কিত গ্রুপ is

groupby()(1) গ্রুপ ডেটা এবং (2) সাথে গোষ্ঠী এটি ফাংশন: ফাংশন দুটি আর্গুমেন্ট লাগে।

এখানে, গ্রুপিং কী হিসাবে প্রতিটি টিপলে প্রথম আইটেমটি ব্যবহার করতে lambda x: x[0]বলা groupby()হয়।

উপরের forবিবৃতিতে, groupbyতিনটি (কী, গোষ্ঠী পুনরুদ্ধারকারী) জোড়া প্রদান করে - প্রতিটি স্বতন্ত্র কীতে একবার। আপনি সেই গ্রুপের প্রতিটি স্বতন্ত্র আইটেমটির পুনরাবৃত্তি করতে প্রত্যাবর্তিত পুনরুক্তি ব্যবহার করতে পারেন।

এখানে তালিকা বোধগম্যতা ব্যবহার করে একই ডেটার সাথে কিছুটা আলাদা উদাহরণ দেওয়া হল:

for key, group in groupby(things, lambda x: x[0]):
    listOfThings = " and ".join([thing[1] for thing in group])
    print key + "s:  " + listOfThings + "."

এটি আপনাকে আউটপুট দেবে:

প্রাণী: ভালুক এবং হাঁস
গাছপালা: ক্যাকটাস
যানবাহন: স্পিড বোট এবং স্কুল বাস


1
গ্রুপগুলি আগে নির্দিষ্ট করার কোনও উপায় আছে এবং তারপরে বাছাইয়ের প্রয়োজন নেই?
জন সালভাটিয়ার

2
এটির টোলগুলি সাধারণত আমার জন্য ক্লিক করে তবে আমার এটির জন্য একটি 'ব্লক'ও ছিল। আমি আপনার উদাহরণগুলির প্রশংসা করেছি - ডক্সের চেয়ে আরও পরিষ্কার। আমি মনে করি ইটারটোলগুলি ক্লিক করুন বা না করুন এর প্রবণতা রয়েছে এবং আপনি যদি একইরকম সমস্যায় পড়ে থাকেন তবে বুঝতে খুব সহজ। বন্যে এখনও এটির দরকার নেই।
21:30

3
@ জুলিয়ান পাইথন ডক্স বেশিরভাগ স্টাফের জন্য দুর্দান্ত বলে মনে হয় তবে এটি যখন পুনরুক্তিকারী, জেনারেটর এবং চেরিপির ক্ষেত্রে আসে তখন ডকগুলি বেশিরভাগই আমার কাছে রহস্যজনক করে তোলে। জ্যাঙ্গোর ডক্স দ্বিগুণ উদ্বিগ্ন।
মার্ক ম্যাক্সমিস্টার

6
বাছাইয়ের জন্য +1 - আমি আমার ডেটা গোষ্ঠীকরণ না করা অবধি আপনার অর্থ কী তা আমি বুঝতে পারি নি।
কোডি

4
@ ডেভিডক্রোক পার্টিতে খুব দেরী করেছেন তবে কারওর পক্ষে সাহায্য করতে পারে। এটি সম্ভবত কারণ আপনার অ্যারেটি groupby(sorted(my_collection, key=lambda x: x[0]), lambda x: x[0]))অনুমানের ভিত্তিতে সাজানো না হয়েছে my_collection = [("animal", "bear"), ("plant", "cactus"), ("animal", "duck")]এবং আপনি গ্রুপটি তৈরি করতে চানanimal or plant
রবিন নেমেথ

71

পাইথন ডক্সের উদাহরণটি বেশ সোজা:

groups = []
uniquekeys = []
for k, g in groupby(data, keyfunc):
    groups.append(list(g))      # Store group iterator as a list
    uniquekeys.append(k)

সুতরাং আপনার ক্ষেত্রে, ডেটা নোডগুলির একটি তালিকা, keyfuncযেখানে আপনার মানদণ্ডের কার্যকারিতাটির যুক্তি যুক্ত হয় এবং তারপরে groupby()ডেটাগুলিকে গোষ্ঠীভুক্ত করে।

ফোন করার আগে বা এটি কাজ করবে না তার আগে আপনাকে অবশ্যই মানদণ্ড অনুসারে ডেটা বাছাই করতে সতর্ক থাকতে হবে groupbygroupbyপদ্ধতিটি কেবলমাত্র একটি তালিকার মাধ্যমে পুনরাবৃত্তি করে এবং যখনই কী পরিবর্তন হয় এটি একটি নতুন গোষ্ঠী তৈরি করে।


45
সুতরাং আপনি পড়েছেন keyfuncএবং "হ্যাঁ, আমি ঠিক জানি এটি কারণ কারণ এই ডকুমেন্টেশনটি বেশ সোজা?" অবিশ্বাস্য!
জারাড

5
আমি বিশ্বাস করি যে বেশিরভাগ লোকেরা এই "সোজা" কিন্তু অকেজো উদাহরণ সম্পর্কে ইতিমধ্যে জানে, কারণ এটি কী ধরণের 'ডেটা' এবং 'কীফঙ্ক' ব্যবহার করবে তা বলে না !! তবে আমি অনুমান করি আপনিও জানেন না, অন্যথায় আপনি লোকেদের এটি পরিষ্কার করে এবং কেবল অনুলিপি-পেস্ট না করে সহায়তা করবেন। অথবা আপনি কি?
অ্যাপোস্টোলোস

69

itertools.groupby আইটেমগুলি গ্রুপিংয়ের জন্য একটি সরঞ্জাম।

দস্তাবেজগুলি থেকে , আমরা এটি আরও কী করতে পারে তা আরও সংগ্রহ করি:

# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B

# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D

groupby বস্তুগুলি কী-গ্রুপ জোড়া দেয় যেখানে গ্রুপটি একটি জেনারেটর।

বৈশিষ্ট্য

  • উ: একটানা আইটেমগুলি গ্রুপ করুন
  • বি একটি সাজানো পুনরাবৃত্তযোগ্য দেওয়া একটি আইটেম সমস্ত উপস্থিতি গ্রুপ
  • গ। কী কী ফাংশন দিয়ে আইটেমগুলি গ্রুপ করবেন তা উল্লেখ করুন *

তুলনা

# Define a printer for comparing outputs
>>> def print_groupby(iterable, keyfunc=None):
...    for k, g in it.groupby(iterable, keyfunc):
...        print("key: '{}'--> group: {}".format(k, list(g)))

# Feature A: group consecutive occurrences
>>> print_groupby("BCAACACAADBBB")
key: 'B'--> group: ['B']
key: 'C'--> group: ['C']
key: 'A'--> group: ['A', 'A']
key: 'C'--> group: ['C']
key: 'A'--> group: ['A']
key: 'C'--> group: ['C']
key: 'A'--> group: ['A', 'A']
key: 'D'--> group: ['D']
key: 'B'--> group: ['B', 'B', 'B']

# Feature B: group all occurrences
>>> print_groupby(sorted("BCAACACAADBBB"))
key: 'A'--> group: ['A', 'A', 'A', 'A', 'A']
key: 'B'--> group: ['B', 'B', 'B', 'B']
key: 'C'--> group: ['C', 'C', 'C']
key: 'D'--> group: ['D']

# Feature C: group by a key function
>>> # keyfunc = lambda s: s.islower()                      # equivalent
>>> def keyfunc(s):
...     """Return a True if a string is lowercase, else False."""   
...     return s.islower()
>>> print_groupby(sorted("bCAaCacAADBbB"), keyfunc)
key: 'False'--> group: ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D']
key: 'True'--> group: ['a', 'a', 'b', 'b', 'c']

ব্যবহারসমূহ

দ্রষ্টব্য: ভেক্টর টেরেনের পাইকন (আলাপ) (স্প্যানিশ) , "কুংফু ভোর উইথ আইটারলজস" থেকে প্রাপ্ত পরবর্তী উদাহরণগুলির বেশ কয়েকটি উদাহরণ । সিটিতে লিখিত groupbyউত্স কোডটিও দেখুন

* এমন একটি ফাংশন যেখানে ফলাফলকে প্রভাবিত করে সমস্ত আইটেমগুলি মধ্য দিয়ে যায় এবং তুলনা করা হয়। মূল ফাংশনযুক্ত অন্যান্য অবজেক্টগুলির মধ্যে রয়েছে sorted(), max()এবং min()


প্রতিক্রিয়া

# OP: Yes, you can use `groupby`, e.g. 
[do_something(list(g)) for _, g in groupby(lxml_elements, criteria_func)]

1
প্রযুক্তিগতভাবে, ডক্স সম্ভবত বলা উচিত [''.join(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
মতিন উলহাক

1
হ্যাঁ. ইটারটুলের বেশিরভাগ ডকস্ট্রিংগুলি এইভাবে "সংক্ষিপ্ত" হয়। যেহেতু ইটারলগুলি সমস্তই পুনরুক্তিযোগ্য, তাই সামগ্রীগুলি প্রদর্শন করতে সেগুলি অবশ্যই একটি বিল্টিন ( list(), tuple()) এ or ালতে হবে বা লুপ / ​​বোধগম্যতায় গ্রাস করতে হবে। এগুলি স্থান সংরক্ষণের জন্য সম্ভবত লেখককে বাদ দেওয়া হয়েছে und
পাইং 5

39

গ্রুপবাইয়ের সাথে একটি পরিষ্কার কৌশলটি একটি লাইনে দৈর্ঘ্যের এনকোডিং চালানো হয়:

[(c,len(list(cgen))) for c,cgen in groupby(some_string)]

আপনাকে 2-টিউপলগুলির একটি তালিকা দেবে যেখানে প্রথম উপাদানটি চর এবং দ্বিতীয়টি পুনরাবৃত্তির সংখ্যা।

সম্পাদনা: নোট করুন যে itertools.groupbyএটি এসকিউএল GROUP BYশব্দার্থবিজ্ঞানের থেকে পৃথক : ইটার্টোলগুলি পূর্বে পুনরুক্তকারীকে বাছাই করে না (সুতরাং) একই "কী" সহ গোষ্ঠীগুলি মার্জ করা হয়নি।


27

আরেকটি উদাহরণ:

for key, igroup in itertools.groupby(xrange(12), lambda x: x // 5):
    print key, list(igroup)

ফলাফল স্বরূপ

0 [0, 1, 2, 3, 4]
1 [5, 6, 7, 8, 9]
2 [10, 11]

দ্রষ্টব্য যে আইগ্রুপটি একটি পুনরাবৃত্তিকারী (ডকুমেন্টেশন হিসাবে এটি উপ-পুনরুক্তিকারী)।

এটি একটি জেনারেটর ছাঁটাইয়ের জন্য দরকারী:

def chunker(items, chunk_size):
    '''Group items in chunks of chunk_size'''
    for _key, group in itertools.groupby(enumerate(items), lambda x: x[0] // chunk_size):
        yield (g[1] for g in group)

with open('file.txt') as fobj:
    for chunk in chunker(fobj):
        process(chunk)

গ্রুপবাইয়ের আরেকটি উদাহরণ - যখন কীগুলি বাছাই করা হয় না। নিম্নলিখিত উদাহরণে, xx- এ থাকা আইটেমগুলি yy এর মান অনুসারে ভাগ করা হয়। এই ক্ষেত্রে, জিরোগুলির একটি সেট প্রথমে আউটপুট হয়, তারপরে সেটগুলির একটি সেট এবং তারপরে আবার জিরোগুলির সেট হয়।

xx = range(10)
yy = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0]
for group in itertools.groupby(iter(xx), lambda x: yy[x]):
    print group[0], list(group[1])

উত্পাদন:

0 [0, 1, 2]
1 [3, 4, 5]
0 [6, 7, 8, 9]

এটি আকর্ষণীয়, কিন্তু এটিরটিউলস না? পুনরাবৃত্তিযোগ্য অংশটিকে বেছে নেওয়ার জন্য ভাল কি না? এটি এমন কোনও বস্তু প্রদান করে যা জেনারেটরের মতো পুনরাবৃত্তি করে তবে এটি সি কোড ব্যবহার করে।
ট্রোজজার

যদি গ্রুপগুলি ধারাবাহিক আকারের হয় তবে @ ট্রজজার আইলাইস আরও ভাল।
woodm1979

আমি পেতে চাই: [0, 1, 2], [1, 2, 3], [2, 3, 4] ...
গিলবার্টএস

21

সতর্কতা:

সিনট্যাক্স তালিকা (গোষ্ঠীবদ্ধ (...)) আপনার ইচ্ছা মতো কাজ করবে না। এটি অভ্যন্তরীণ পুনরুক্তিকারী অবজেক্টগুলি ধ্বংস করে দিয়েছে বলে মনে হচ্ছে so

for x in list(groupby(range(10))):
    print(list(x[1]))

উত্পাদন করবে:

[]
[]
[]
[]
[]
[]
[]
[]
[]
[9]

তালিকার পরিবর্তে (গ্রুপবিহীন (...)) এর জন্য, কে এর জন্য [(কে, তালিকা (জি)) কে, গ্রুপবাইতে (...)] ব্যবহার করে দেখুন, বা যদি আপনি প্রায়শই সিনট্যাক্সটি প্রায়শই ব্যবহার করেন,

def groupbylist(*args, **kwargs):
    return [(k, list(g)) for k, g in groupby(*args, **kwargs)]

এবং সমস্ত একসাথে সেই সমস্যাযুক্ত (ছোট ডেটার জন্য) পুনরাবৃত্তিগুলি এড়িয়ে গিয়ে গ্রুপবাই কার্যকারিতা অ্যাক্সেস পান।


3
উত্তরগুলির মধ্যে অনেকগুলি হোঁচট খাওয়ার কথা উল্লেখ করে যা প্রত্যাশিত ফলাফল পেতে আপনাকে গ্রুপবাইয়ের আগে বাছাই করতে হবে। আমি কেবল এই উত্তরের মুখোমুখি হয়েছি, যা আমি আগে কখনও দেখিনি এমন আজব আচরণের ব্যাখ্যা দেয় explains আমি আগে দেখিনি কারণ কেবলমাত্র আমি এখনই (গ্রুপবাই (রেঞ্জ (10)) কে @ সিংসুলার হিসাবে তালিকাবদ্ধ করার চেষ্টা করছিলাম। এর আগে আমি সর্বদা গ্রুপবাই অবজেক্টের মাধ্যমে "ম্যানুয়ালি" পুনরুক্তির "প্রস্তাবিত" পদ্ধতির ব্যবহার করতাম তালিকাটি () নির্মাণকারীকে "স্বয়ংক্রিয়ভাবে" করতে দিন
দ্য রেড মটর

9

আমি অন্য একটি উদাহরণ দিতে চাই যেখানে বাছাই ছাড়াই গ্রুপবাই কাজ করছে না। জেমস সুলাক উদাহরণস্বরূপ রূপান্তরিত

from itertools import groupby

things = [("vehicle", "bear"), ("animal", "duck"), ("animal", "cactus"), ("vehicle", "speed boat"), ("vehicle", "school bus")]

for key, group in groupby(things, lambda x: x[0]):
    for thing in group:
        print "A %s is a %s." % (thing[1], key)
    print " "

আউটপুট হয়

A bear is a vehicle.

A duck is a animal.
A cactus is a animal.

A speed boat is a vehicle.
A school bus is a vehicle.

যানবাহন সহ দুটি গ্রুপ রয়েছে, যেখানে একজন কেবল একটি গ্রুপ আশা করতে পারে


5
আপনি যে ফাংশনটি দ্বারা গ্রুপিং করছেন সেটি কী হিসাবে ব্যবহার করে আপনাকে প্রথমে ডেটা বাছাই করতে হবে। এটি উপরে দুটি পোস্টে উল্লেখ করা হয়েছে, তবে তা হাইলাইট করা হয়নি।
এমবাচকরভ

সাব-এটারেটরগুলি কী দ্বারা সংরক্ষণ করার জন্য আমি একটি ডিক বোধগম্যতা করছিলাম, যতক্ষণ না বুঝলাম যে এটি ডিকের মতোই সহজ (গ্রুপবিজ (পুনরুক্তিকারী, কী))। মিষ্টি।
Trojjer

দ্বিতীয় মতামত এবং পরীক্ষা-নিরীক্ষার পরে, গ্রুপবাইয়ের চারপাশে মোড়ানো ডিক কলটি গ্রুপের সাব-ইটারেটরকে ক্লান্ত করবে। অভিশাপ।
ট্রোজজার

এই উত্তরের মূল বক্তব্য কী? আসল উত্তরের ভিত্তিতে এটি কীভাবে তৈরি হচ্ছে ?
কোডফোরস্টার

7

@ ক্যাপ্টসোলো, আমি আপনার উদাহরণ চেষ্টা করেছিলাম, কিন্তু এটি কার্যকর হয়নি।

from itertools import groupby 
[(c,len(list(cs))) for c,cs in groupby('Pedro Manoel')]

আউটপুট:

[('P', 1), ('e', 1), ('d', 1), ('r', 1), ('o', 1), (' ', 1), ('M', 1), ('a', 1), ('n', 1), ('o', 1), ('e', 1), ('l', 1)]

আপনি দেখতে পাচ্ছেন যে দুটি ও ও দুটি ই আছে তবে তারা পৃথক গোষ্ঠীতে পরিণত হয়েছে। আমি যখন বুঝতে পারলাম আপনাকে গ্রুপবাইয়ের কার্যক্রমে পাসের তালিকাটি বাছাই করা দরকার। সুতরাং, সঠিক ব্যবহারটি হ'ল:

name = list('Pedro Manoel')
name.sort()
[(c,len(list(cs))) for c,cs in groupby(name)]

আউটপুট:

[(' ', 1), ('M', 1), ('P', 1), ('a', 1), ('d', 1), ('e', 2), ('l', 1), ('n', 1), ('o', 2), ('r', 1)]

শুধু মনে আছে, তালিকাটি বাছাই না করা থাকলে, গ্রুপবাইয়ের কাজটি কার্যকর হবে না !


7
আসলে এটি কাজ করে। আপনি এই আচরণটি ভাঙ্গা হিসাবে মনে করতে পারেন, তবে এটি কিছু ক্ষেত্রে কার্যকর। : একটি উদাহরণ জন্য এই প্রশ্নের উত্তর দেখুন stackoverflow.com/questions/1553275/...
ডেনিস Otkidach

6

বাছাই এবং গোষ্ঠীভুক্ত

from itertools import groupby

val = [{'name': 'satyajit', 'address': 'btm', 'pin': 560076}, 
       {'name': 'Mukul', 'address': 'Silk board', 'pin': 560078},
       {'name': 'Preetam', 'address': 'btm', 'pin': 560076}]


for pin, list_data in groupby(sorted(val, key=lambda k: k['pin']),lambda x: x['pin']):
...     print pin
...     for rec in list_data:
...             print rec
... 
o/p:

560076
{'name': 'satyajit', 'pin': 560076, 'address': 'btm'}
{'name': 'Preetam', 'pin': 560076, 'address': 'btm'}
560078
{'name': 'Mukul', 'pin': 560078, 'address': 'Silk board'}

5

আমি পাইথনের itertools.groupby () কীভাবে ব্যবহার করব?

আপনি বারবার পুনরাবৃত্তি করতে গোষ্ঠীগুলিকে গোষ্ঠীবিশেষ ব্যবহার করতে পারেন। আপনি গোষ্ঠী অনুসারে একটি পুনরাবৃত্তযোগ্য, এবং একটি optionচ্ছিক কী ফাংশন / কলযোগ্য যার দ্বারা আইটেমগুলি পুনরাবৃত্ত হতে পারে তা পরীক্ষা করতে হবে, এবং এটি একটি পুনরাবৃত্তির ফিরিয়ে দেয় যা কী কলযোগ্য এবং সত্যিকারের আইটেমগুলির ফলাফলের দ্বিগুণ দেয় আরেকটি পুনরাবৃত্ত সহায়তা থেকে:

groupby(iterable[, keyfunc]) -> create an iterator which returns
(key, sub-iterator) grouped by each value of key(value).

এখানে একটি গণনা অনুসারে একটি কর্টিন ব্যবহার করে গ্রুপ্বাইয়ের উদাহরণ দেওয়া আছে, এটি একটি মূল কলযোগ্য (এই ক্ষেত্রে coroutine.send) ব্যবহার করে তবে অনেকগুলি পুনরাবৃত্তি এবং উপাদানগুলির গোষ্ঠীযুক্ত সাব-ইটারেটরগুলির জন্য কেবল কাউন্টটি বের করতে পারে:

import itertools


def grouper(iterable, n):
    def coroutine(n):
        yield # queue up coroutine
        for i in itertools.count():
            for j in range(n):
                yield i
    groups = coroutine(n)
    next(groups) # queue up coroutine

    for c, objs in itertools.groupby(iterable, groups.send):
        yield c, list(objs)
    # or instead of materializing a list of objs, just:
    # return itertools.groupby(iterable, groups.send)

list(grouper(range(10), 3))

কপি করে প্রিন্ট

[(0, [0, 1, 2]), (1, [3, 4, 5]), (2, [6, 7, 8]), (3, [9])]

1

একটি কার্যকর উদাহরণ যা আমি পেয়েছিলাম এটি সহায়ক হতে পারে:

from itertools import groupby

#user input

myinput = input()

#creating empty list to store output

myoutput = []

for k,g in groupby(myinput):

    myoutput.append((len(list(g)),int(k)))

print(*myoutput)

নমুনা ইনপুট: 14445221

নমুনা আউটপুট: (1,1) (3,4) (1,5) (2,2) (1,1)


1

এই বেসিক প্রয়োগটি আমাকে এই ফাংশনটি বুঝতে সহায়তা করেছে। আশা করি এটি অন্যকেও সহায়তা করবে:

arr = [(1, "A"), (1, "B"), (1, "C"), (2, "D"), (2, "E"), (3, "F")]

for k,g in groupby(arr, lambda x: x[0]):
    print("--", k, "--")
    for tup in g:
        print(tup[1])  # tup[0] == k
-- 1 --
A
B
C
-- 2 --
D
E
-- 3 --
F

0

আপনি নিজস্ব গ্রুপবাই ফাংশন লিখতে পারেন:

           def groupby(data):
                kv = {}
                for k,v in data:
                    if k not in kv:
                         kv[k]=[v]
                    else:
                        kv[k].append(v)
           return kv

     Run on ipython:
       In [10]: data = [('a', 1), ('b',2),('a',2)]

        In [11]: groupby(data)
        Out[11]: {'a': [1, 2], 'b': [2]}

1
পুনর্নবীকরণ চাকা একটি দুর্দান্ত ধারণা নয়, এছাড়াও প্রশ্নটি ইটারটুলগুলি গোষ্ঠীভুক্ত করে ব্যাখ্যা করা, নিজের লেখা নয়
ব্যবহারকারী 2678074

1
@ user2678074 আপনি ঠিক বলেছেন। আপনি যদি শেখার দৃষ্টিকোণের জন্য নিজের লিখতে চান তবে এটি কিছু।
আকাশ

2
ডিফল্টডিক্ট (তালিকা) আরও ভাল ব্যবহার করুন যাতে এটি আরও সংক্ষিপ্ত হয়
মিকি পার্লস্টাইন

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