পাইথনের "ইন" সেট অপারেটর


143

আমি inসেটগুলির জন্য পাইথন অপারেটর সম্পর্কে কিছুটা বিভ্রান্ত ।

আমার যদি একটি সেট sএবং কিছু উদাহরণ থাকে bতবে এটির b in sঅর্থ কি এটির অর্থ সত্য " এর মতো কিছু উপাদান রয়েছেxsb == xtrue "?


77
আপনি কি গণিতবিদ? অত্যধিক জটিল উপায়ে সাধারণ জিনিস বর্ণনা করা হচ্ছে ..;)
21

13
কম্পিউটার বিজ্ঞানী. আমি কিছুটা বিভ্রান্ত কারণ ডকুমেন্টেশনটি "এস এর সদস্যতার জন্য টেস্ট এক্স" বলে। আমার কাছে এর অর্থ হতে পারে "উদাহরণটি x এর মধ্যে রয়েছে" বা "কিছু উদাহরণ উপস্থিত রয়েছে যার এক্স এর সমান মান আছে"। আমি জানি না এটি একটি পরিচয় বা সমতার তুলনা কিনা।
দেজাস

6
@ ডেজাস: যেহেতু আপনি জানেন যে পাইথনের দুটি অপারেটর ইক্যুয়ালিটি তুলনা এবং পরিচয় তুলনা রয়েছে, তাই আপনার একটি পরীক্ষা তৈরি করতে সক্ষম হওয়া উচিত যা প্রতিটি নিশ্চিত করে। আপনি যদি সেই পরীক্ষাটি পোস্ট করেন তবে এটি সহায়তা করবে।
এস.লোট

উত্তর:


101

হ্যাঁ, কিন্তু এটা আরো অর্থ hash(b) == hash(x), তাই আইটেম সমতা একই করতে যথেষ্ট নয়।


14
ঠিক আছে তাই "এর মধ্যে এমন কোনও উপাদান x আছে যা হ্যাশ (খ) == হ্যাশ (এক্স) এবং x == খ"?
দেজাস

12
যদি কেউ তার ক্লাসের হ্যাশ ফাংশনটি একটি বাঁকানো পথে কার্যকর করে, তবে এটি সে পেতে পারে (এবং প্রাপ্য)।
ugoren

84

সেটা ঠিক. আপনি এটি অনুবাদকের মতো করে চেষ্টা করতে পারেন:

>>> a_set = set(['a', 'b', 'c'])

>>> 'a' in a_set
True

>>>'d' in a_set
False

2
স্ট্রিং ধ্রুবকগুলি প্রায়শই ইন্টার্ন করা হয় (চেষ্টা করুন a = 'a'; b = 'a'; a is b) এটি খুব ভাল পরীক্ষা নয় । a = (1, 2, 3); b = (1, 2, 3); a == b; hash(a) == hash(b); a is b; a in set([b])পরিবর্তে আমি এটি চেষ্টা করেছিলাম ।
ফিলিপ

11

হ্যাঁ এটি এর অর্থ হতে পারে বা এটি একটি সাধারণ পুনরাবৃত্তিকারী হতে পারে। উদাহরণস্বরূপ: পুনরুক্তি হিসাবে উদাহরণ:

a=set(['1','2','3'])
for x in a:
 print ('This set contains the value ' + x)

একইভাবে একটি চেক হিসাবে:

a=set('ILovePython')
if 'I' in a:
 print ('There is an "I" in here')

সম্পাদিত: তালিকা এবং স্ট্রিংয়ের পরিবর্তে সেটগুলি অন্তর্ভুক্ত করতে সম্পাদিত


2
সেটগুলির সাথে এটির কী সম্পর্ক?
Ignacio Vazquez-Abram 23

ভাল আমি মনে করি একটি তালিকা বা এমনকি একটি স্ট্রিং একটি সেট অনুরূপ বৈশিষ্ট্য হিসাবে বিবেচনা করা যেতে পারে। তারা উপাদান সংগ্রহ।
অর্ণব ঘোসাল

1
না, সেটগুলিকে কন্টেন্টগুলি পরীক্ষা করার জন্য অতিরিক্ত শর্ত রয়েছে যা সিকোয়েন্সগুলি না করে।
Ignacio Vazquez-Abram

3

স্ট্রিংগুলি setধরণের না হলেও inস্ক্রিপ্টগুলিতে বৈধতার সময় একটি মূল্যবান সম্পত্তি থাকে:

yn = input("Are you sure you want to do this? ")
if yn in "yes":
    #accepts 'y' OR 'e' OR 's' OR 'ye' OR 'es' OR 'yes'
    return True
return False

আমি আশা করি এটি আপনাকে inএই উদাহরণটির ব্যবহার আরও ভালভাবে বুঝতে সহায়তা করে ।


2
এটি কোনও সেট নয়। বা স্ট্রিং পরিবর্তনযোগ্য হয় না।
Ignacio Vazquez-Abram 23

7
... or 'e' or 'es' or 's'। কেবল এই অর্থহীন ভুল উত্তর মুছে ফেলার কথা বিবেচনা করুন।
কুক্সপ্লসোন

3

সেটগুলি ডিক্টের চেয়ে আলাদা আচরণ করে, আপনার ইস্যুবসেট () এর মতো সেট অপারেশন ব্যবহার করতে হবে:

>>> k
{'ip': '123.123.123.123', 'pw': 'test1234', 'port': 1234, 'debug': True}
>>> set('ip,port,pw'.split(',')).issubset(set(k.keys()))
True
>>> set('ip,port,pw'.split(',')) in set(k.keys())
False

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