পাইথনে আমি কীভাবে সেট সেট তৈরি করতে পারি?


126

আমি পাইথনে সেট সেট করার চেষ্টা করছি। কীভাবে করব তা আমি বুঝতে পারি না।

খালি সেট দিয়ে শুরু xx:

xx = set([])
# Now we have some other set, for example
elements = set([2,3,4])
xx.add(elements)

তবে আমি পেয়েছি

TypeError: unhashable type: 'list'

অথবা

TypeError: unhashable type: 'set'

পাইথনে সেট সেট করা কি সম্ভব?

আমি সেটগুলির একটি বৃহত সংগ্রহের সাথে কাজ করছি এবং আমি নকল সেটগুলি মোকাবেলা করতে না সক্ষম হতে চাই (সেট A1, A2, .... এর একটি সেট বি, এআই = আজ দুটি সেট "বাতিল" করবে)

উত্তর:


120

পাইথনের অভিযোগ কারণ অভ্যন্তরীণ setবস্তুগুলি পরিবর্তনযোগ্য এবং এইভাবে চলাচলযোগ্য নয়। সমাধানটি frozensetঅভ্যন্তরীণ সেটগুলির জন্য ব্যবহার করা , এটি নির্দেশ করার জন্য যে সেগুলি পরিবর্তন করার কোনও উদ্দেশ্য আপনার নেই।


59

লোকেরা ইতিমধ্যে উল্লেখ করেছে যে আপনি হিমশীতল () দিয়ে এটি করতে পারেন , সুতরাং আমি কীভাবে এটি অর্জন করতে পারি তার একটি কোড যুক্ত করব:

উদাহরণস্বরূপ আপনি নিম্নলিখিত তালিকার তালিকা থেকে সেটগুলির সেট তৈরি করতে চান:

t = [[], [1, 2], [5], [1, 2, 5], [1, 2, 3, 4], [1, 2, 3, 6]]

আপনি নিম্নলিখিত উপায়ে আপনার সেট তৈরি করতে পারেন:

t1 = set(frozenset(i) for i in t)

9
অথবা আপনি মানচিত্র ব্যবহার করতে পারেন! set(map(frozenset, t))
ম্যাট ডজ

18

frozensetভিতরে ব্যবহার করুন ।


9
পাইথনে নতুন যেহেতু আপনি সম্ভবত পরিবর্তনযোগ্য / অপরিবর্তনীয় বস্তু সম্পর্কে কয়েকটি পয়েন্টার দিতে পারেন?
শেঠ জনসন

2
@ শেঠ: আমি পারতাম, তবে পরিবর্তনের বিষয়টি কোনও কারণ নয়।
Ignacio Vazquez-Abrams

অনেক ধন্যবাদ! শুধু পড়ার পুন: এখন পরিবর্তন তালিকার সেটগুলির মতো মনে হয় এটিও কাজ করতে পারে তবে হিমায়িত এটি সম্পন্ন করে বলে মনে হয়। আবার ধন্যবাদ!
ম্যাট

@ ইগনাসিও আমি ভেবেছিলাম যে ডিক্টের সেট এবং কীতে থাকা সদস্যদের হ্যাশ-সক্ষম এবং অতএব অপরিবর্তনীয় হতে হবে।
শেঠ জনসন

7
হ্যাশাবিলিটি এবং মিউটিবিলিটি পারস্পরিক-একচেটিয়াভাবে আবশ্যক নয়। এটি ঠিক তাই ঘটে যে বেশিরভাগ বেসিক পাইথন ধরণের অংশগুলি ভাগ করে।
Ignacio Vazquez-Abrams

3

সুতরাং আমি ঠিক একই সমস্যা ছিল। আমি একটি ডেটা স্ট্রাকচার তৈরি করতে চেয়েছিলাম যা সেটগুলির সেট হিসাবে কাজ করে। সমস্যাটি হ'ল সেটগুলিতে অবশ্যই অপরিবর্তনীয় বস্তু থাকতে হবে । সুতরাং, আপনি যা করতে পারেন তা কেবল এটি টিপলসের সেট হিসাবে তৈরি করা। এটা আমার জন্য ভাল কাজ!

A = set()
A.add( (2,3,4) )##adds the element
A.add( (2,3,4) )##does not add the same element
A.add( (2,3,5) )##adds the element, because it is different!

22
টিপলসগুলিতে, উপাদান অর্ডারটি গুরুত্বপূর্ণ। সুতরাং A.add( (4,3,2)); A.add((2,4,3)); A.add((2,3,4)), তিনটি স্বতন্ত্র উপাদান যোগ হবে যখন মূল প্রশ্ন "সেট সেট", যা যে বোঝা সম্পর্কে (2,3,4), (4,3,2), (2,4,3)একই।
বরিস গোরালিক

1

2020 পর্যন্ত, সরকারী পাইথন ডকুমেন্টেশনfrozenset সেটগুলির সেট উপস্থাপনের জন্য ব্যবহার করার পরামর্শ দেয় ।


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