in ऑपरेटर Python कासदस्यता ऑपरेटर है जो जांचता है कि कोई मान एक संग्रह में मौजूद है या नहीं जैसे कि सूची, टुपल, स्ट्रिंग, सेट या शब्दकोश। यह True लौटाता है यदि मान मिल जाता है और अन्यथा False। यह ऑपरेटर सदस्यता परीक्षण को साफ और पठनीय बनाता है।
in ऑपरेटर क्या करता है?
in ऑपरेटर एकसदस्यता परीक्षण करता है: यह एक संग्रह के अंदर दिए गए मान की खोज करता है और एक बूलियन परिणाम लौटाता है। मूल सिंटैक्स है:
value in collection यहाँ, value वह है जिसे आप खोज रहे हैं, और collection कोई भी पुनरावृत्त योग्य वस्तु हो सकती है जैसे सूची, टुपल, स्ट्रिंग, सेट या शब्दकोश (शब्दकोशों के लिए, in डिफ़ॉल्ट रूप से कुंजियाँ जांचता है)।
सूचियों और टुपल्स के साथ in का उपयोग
सूचियाँ और टुपल्स in ऑपरेटर के लिए सबसे सामान्य उपयोग के मामले हैं।
उदाहरण 1: सूचियों में सदस्यता जांचना
numbers = [1, 2, 3, 4, 5]
print(3 in numbers) # Output: True
print(10 in numbers) # Output: False
print(3 not in numbers) # Output: False True False False
उदाहरण 2: टुपल्स में सदस्यता जांचना
coordinates = (10, 20, 30)
print(20 in coordinates) # Output: True
print(50 in coordinates) # Output: False
print(50 not in coordinates) # Output: True True False True
सूचियों और टुपल्स के लिए, Python एकरैखिक खोज एल्गोरिदम का उपयोग करता है, जिसका अर्थ है कि यह एक मैच मिलने या अंत तक पहुँचने तक प्रत्येक तत्व को एक-एक करके जांचता है। समय जटिलता O(n) है, इसलिए बड़े संग्रहों में खोज में अधिक समय लगता है।
स्ट्रिंग्स के साथ in का उपयोग
स्ट्रिंग्स के साथ उपयोग किए जाने पर, in ऑपरेटरउपस्ट्रिंग सदस्यता की जांच करता है।
उदाहरण 1: मूल उपस्ट्रिंग जांच
text = "Hello, World!"
print("World" in text) # Output: True
print("Python" in text) # Output: False
print("hello" in text) # Output: False (case-sensitive) True False False
उदाहरण 2: केस-असंवेदनशील जांच
text = "Hello, World!"
search = "world"
print(search.lower() in text.lower()) # Output: True True
स्ट्रिंग सदस्यता परीक्षण केस-संवेदनशील हैं। यदि आपको केस-असंवेदनशील जांच की आवश्यकता है, तो दोनों स्ट्रिंग्स को एक ही केस में बदलें। Python स्ट्रिंग्स में उपस्ट्रिंग खोजों में सबसे खराब स्थिति में O(n) जटिलता भी होती है।
सेट्स के साथ in का उपयोग
सेट्स सदस्यता परीक्षण के लिए अनुकूलित हैं। क्योंकि सेट्स आंतरिक रूप सेहैश टेबल का उपयोग करते हैं, in ऑपरेटर की औसत समय जटिलता O(1) है।
उदाहरण 1: त्वरित सदस्यता जांच
allowed_users = {"alice", "bob", "charlie"}
print("alice" in allowed_users) # Output: True
print("dave" in allowed_users) # Output: False True False
उदाहरण 2: प्रदर्शन अनुकूलन
# Slow for large lists
users = ["alice", "bob", "charlie"]
if "alice" in users:
print("Found")
# Fast - convert to set first
users_set = set(users)
if "alice" in users_set:
print("Found") Found Found
यदि आपको कई सदस्यता जांच करने की आवश्यकता है, तो पहले एक सूची को सेट में बदलने से प्रदर्शन में नाटकीय रूप से सुधार हो सकता है।
शब्दकोशों के साथ in का उपयोग
जब आप in का उपयोग शब्दकोश के साथ करते हैं, तो यह जांचता है कि कोई कुंजी मौजूद है या नहीं (मान नहीं)।
उदाहरण 1: कुंजियाँ जांचना
user_ages = {"alice": 30, "bob": 25, "charlie": 35}
print("alice" in user_ages) # Output: True
print("dave" in user_ages) # Output: False
print(30 in user_ages) # Output: False (30 is a value, not a key) True False False
उदाहरण 2: मान जांचना
user_ages = {"alice": 30, "bob": 25, "charlie": 35}
# Check if a value exists
print(30 in user_ages.values()) # Output: True True
उदाहरण 3: कुंजी-मान जोड़े जांचना
user_ages = {"alice": 30, "bob": 25, "charlie": 35}
# Check if a key-value pair exists
print(("alice", 30) in user_ages.items()) # Output: True True
कुंजियों के लिए शब्दकोश सदस्यता परीक्षण औसतन O(1) भी हैं क्योंकि शब्दकोश हैश टेबल का उपयोग करते हैं।
not in ऑपरेटर
Python not in ऑपरेटर भी प्रदान करता है, जो True लौटाता है यदि माननहीं मिला।
उदाहरण: not in का उपयोग
numbers = [1, 2, 3, 4, 5]
print(10 not in numbers) # Output: True
print(3 not in numbers) # Output: False True False
यह in का केवल तार्किक निषेध है, और यह सभी समान डेटा प्रकारों के साथ काम करता है।
कस्टम वस्तुओं के साथ in का उपयोग
यदि आप अपनी खुद की कक्षाएं बनाते हैं, तो आप __contains__() विधि को लागू करके उन्हें in ऑपरेटर के साथ काम करने के लिए बना सकते हैं।
उदाहरण: कस्टम संग्रह वर्ग
class MyCollection:
def __init__(self, items):
self.items = items
def __contains__(self, item):
return item in self.items
my_list = MyCollection([1, 2, 3, 4, 5])
print(3 in my_list) # Output: True
print(10 in my_list) # Output: False True False
यदि आपकी कक्षा __contains__() को परिभाषित नहीं करती है लेकिन पुनरावृत्त योग्य है (__iter__() लागू करती है), तो Python सदस्यता जांचने के लिए संग्रह के माध्यम से पुनरावृत्ति पर वापस जाएगा।
प्रदर्शन विचार
in ऑपरेटर का प्रदर्शन डेटा प्रकार पर निर्भर करता है।
| डेटा प्रकार | समय जटिलता | नोट्स |
|---|---|---|
| List | O(n) | Linear search |
| Tuple | O(n) | Linear search |
| String | O(n) | Substring search |
| Set | O(1) average | Hash-based lookup |
| Dictionary | O(1) average | Hash-based lookup (keys only) |
बड़े संग्रहों पर लगातार सदस्यता जांच के लिए, सूचियों या टुपल्स पर सेट्स या शब्दकोशों को प्राथमिकता दें।
सामान्य उपयोग के मामले
उपयोग मामला 1: उपयोगकर्ता अनुमतियाँ जांचना
admin_users = {"alice", "bob"}
if current_user in admin_users:
print("Access granted")
else:
print("Access denied") Access granted
उपयोग मामला 2: इनपुट सत्यापन
valid_options = ["yes", "no", "maybe"]
user_input = input("Enter your choice: ")
if user_input in valid_options:
print("Valid choice")
else:
print("Invalid choice") Valid choice
उपयोग मामला 3: डेटा फ़िल्टर करना
exclude_words = {"the", "is", "at", "which", "on"}
words = ["the", "quick", "brown", "fox"]
filtered = [word for word in words if word not in exclude_words]
print(filtered) # Output: ['quick', 'brown', 'fox'] ['quick', 'brown', 'fox']
सामान्य गलतियाँ और सर्वोत्तम प्रथाएँ
गलती 1: रेंज जांच के लिए in का उपयोग
# Not recommended for performance-critical code
if 5 in range(1, 10):
print("In range")
# Better: Use comparison operators
if 1 <= 5 < 10:
print("In range") प्रदर्शन-महत्वपूर्ण कोड में if 5 in range(1, 10): जैसी संख्यात्मक रेंज जांच के लिए inका उपयोग न करें; इसके बजाय तुलना ऑपरेटरों का उपयोग करें: if 1 <= 5 < 10:।
अभ्यास 1: लगातार जांच के लिए सूचियों को सेट्स में बदलना
# When checking membership in large lists repeatedly
large_list = [1, 2, 3, ...] # Many items
# Convert to set for faster lookups
large_set = set(large_list)
if item in large_set:
print("Found") बड़ी सूचियों में सदस्यता को बार-बार जांचते समय, बहुत तेज़ लुकअप के लिए पहले सूची को सेट में बदलें।
अभ्यास 2: शब्दकोश व्यवहार याद रखना
user_data = {"name": "Alice", "age": 30}
# in checks keys, not values
print("name" in user_data) # True
print("Alice" in user_data) # False
# To check values, use .values()
print("Alice" in user_data.values()) # True याद रखें कि in शब्दकोशों मेंकुंजियाँ जांचता है, मान नहीं। यदि आपको मान या कुंजी-मान जोड़े जांचने की आवश्यकता है, तो .values() या .items() का उपयोग करें।
अभ्यास 3: स्ट्रिंग्स में केस संवेदनशीलता
text = "Hello, World!"
# Case-sensitive check
print("hello" in text) # False
# Case-insensitive check
print("hello".lower() in text.lower()) # True in के साथ स्ट्रिंग सदस्यता परीक्षण केस-संवेदनशील हैं; यदि आवश्यक हो तो केस को सामान्य करें।
इसे स्वयं आज़माएं
नीचे दिए गए कोड को संशोधित करके आपने जो सीखा है उसका अभ्यास करें। विभिन्न आउटपुट देखने के लिए मानों और शर्तों को बदलने का प्रयास करें!
// परिणाम देखने के लिए "कोड चलाएं" पर क्लिक करें
संबंधित विषय
अक्सर पूछे जाने वाले प्रश्न
Python में 'in' और '==' के बीच क्या अंतर है?
in ऑपरेटर जांचता है कि कोई मान एक संग्रह में मौजूद है या नहीं (सदस्यता परीक्षण), जबकि == जांचता है कि दो मान समान हैं या नहीं। उदाहरण के लिए, 3 in [1, 2, 3] True लौटाता है (सदस्यता), जबकि [1, 2, 3] == [1, 2, 3] True लौटाता है (समानता)।
क्या 'in' शब्दकोशों में कुंजियाँ या मान जांचता है?
in ऑपरेटर डिफ़ॉल्ट रूप से शब्दकोशों मेंकुंजियाँ जांचता है। मान जांचने के लिए value in dict.values() का उपयोग करें। कुंजी-मान जोड़े जांचने के लिए (key, value) in dict.items() का उपयोग करें।
क्या 'in' स्ट्रिंग्स जांचते समय केस-संवेदनशील है?
हाँ, in ऑपरेटर स्ट्रिंग्स जांचते समय केस-संवेदनशील है। "hello" in "Hello, World!" False लौटाता है। केस-असंवेदनशील जांच के लिए, दोनों स्ट्रिंग्स को एक ही केस में बदलें: "hello".lower() in "Hello, World!".lower()।
एक सूची में 'in' जांच बनाम एक सेट में 'in' जांच के बीच प्रदर्शन अंतर क्या है?
एक सूची में सदस्यता जांच में O(n) समय जटिलता होती है (रैखिक खोज), जबकि एक सेट में जांच में O(1) औसत समय जटिलता होती है (हैश-आधारित खोज)। बड़े संग्रहों पर लगातार सदस्यता जांच के लिए, बेहतर प्रदर्शन के लिए सेट्स का उपयोग करें।
क्या मैं 'in' का उपयोग कस्टम कक्षाओं के साथ कर सकता हूँ?
हाँ, आप __contains__() विधि को लागू करके कस्टम कक्षाओं को in ऑपरेटर के साथ काम करने के लिए बना सकते हैं। यदि आपकी कक्षा पुनरावृत्त योग्य है (__iter__() लागू करती है), तो Python __contains__() परिभाषित नहीं होने पर पुनरावृत्ति पर वापस जाएगा।
'in' और 'not in' के बीच क्या अंतर है?
in ऑपरेटर True लौटाता है यदि एक मान एक संग्रह में मिल जाता है, जबकि not in True लौटाता है यदि एक माननहीं मिला। not in not (value in collection) के बराबर है।