Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

पायथन में अपरिवर्तनीय डेटा संरचनाओं को कैसे लागू करें? (How to implement immutable Data structures in Python?)


समस्या

आपको पायथन में अपरिवर्तनीय डेटा संरचनाओं को लागू करने की आवश्यकता है।

परिचय..

अपरिवर्तनीय डेटा संरचनाएं बहुत आसान होती हैं जब आप समानांतर प्रोग्रामिंग में एक ही समय में कई लोगों को डेटा के एक टुकड़े को संशोधित करने से रोकना चाहते हैं। परिवर्तनीय डेटा संरचनाएं (जैसे सरणी) किसी भी समय बदली जा सकती हैं जबकि अपरिवर्तनीय डेटा संरचनाएं नहीं बदली जा सकतीं।

इसे कैसे करें..

आइए मैं आपको चरण दर चरण दिखाता हूं कि अपरिवर्तनीय और परिवर्तनीय डेटा संरचनाओं से कैसे निपटें।

उदाहरण

# चरण 01 - एक परिवर्तनीय सरणी बनाएं। # एक सरणी परिभाषित करें
atp_players = ['Murray', 'Nadal', 'Djokovic']
print(f" *** मेरी सरणी में मूल डेटा है - {atp_players}")

*** मेरी सरणी में मूल डेटा है -

['Murray', 'Nadal', 'Djokovic']
# मरे से फेडरर में खिलाड़ी का नाम बदलना
atp_players[0] = 'Federer'
print(f" *** मेरी सरणी में संशोधित डेटा है - {atp_players}")

*** मेरी सरणी में संशोधित डेटा है -

['Federer', 'Nadal', 'Djokovic']

निष्कर्ष

हम सरणी मान को ऐसे ही बदलने में सक्षम हुए हैं जो उपयोगी हो सकता है यदि आप इस सरणी के अनन्य उपयोगकर्ता हैं। हालांकि, वास्तविक समय उत्पादन में कई प्रोग्राम इस सरणी का उपयोग परिवर्तनों के लिए कर सकते हैं और अप्रत्याशित डेटा का परिणाम हो सकता है।

दूसरी ओर टपल्स थोड़ा अलग व्यवहार करते हैं, नीचे दिए गए उदाहरण को देखें।

# चरण 02 - एक टपल बदलने का प्रयास करें
try:
    atp_players_tuple = ('Murray', 'Nadal', 'Djokovic')
    print(f" *** मेरे टपल में मूल डेटा है - {atp_players_tuple}")
    atp_players_tuple[0] = 'Federer'
except Exception as error:
    print(f" *** डेटा संशोधित करने का प्रयास किया लेकिन समाप्त हुआ - {error}")

*** मेरे टपल में मूल डेटा है - ('Murray', 'Nadal', 'Djokovic') *** डेटा संशोधित करने का प्रयास किया लेकिन समाप्त हुआ - 'tuple' object does not support item assignment

निष्कर्ष :

आपने ऊपर देखा है, टपल को संशोधित नहीं किया जा सकता है? हालांकि एक अपवाद है, यदि टपल के भीतर सरणियाँ हैं तो मान बदले जा सकते हैं।

atp_players_array_in_tuple = (['Murray'], ['Nadal'], ['Djokovic'])
print(f" *** सरणियों के साथ मेरे टपल में मूल डेटा है - {atp_players_array_in_tuple}")
atp_players_array_in_tuple[0][0] = 'Federer'
print(f" *** सरणियों के साथ मेरे टपल में संशोधित डेटा है - {atp_players_array_in_tuple}")

*** सरणियों के साथ मेरे टपल में मूल डेटा है - (['Murray'], ['Nadal'], ['Djokovic']) *** सरणियों के साथ मेरे टपल में संशोधित डेटा है - (['Federer'], ['Nadal'], ['Djokovic'])

तो डेटा की रक्षा कैसे करें? हम्म, बस सरणियों को टपल्स में परिवर्तित करके।

try:
    atp_players_tuple_in_tuple = (('Murray'), ('Nadal'), ('Djokovic'))
    print(f" *** मेरे टपल में मूल डेटा है - {atp_players_tuple_in_tuple}")
    atp_players_tuple_in_tuple[0] = 'Federer'
except Exception as error:
    print(f" *** मेरे टपल में डेटा संशोधित करने का प्रयास किया लेकिन समाप्त हुआ - {error}")

*** मेरे टपल में मूल डेटा है - ('Murray', 'Nadal', 'Djokovic') *** मेरे टपल में डेटा संशोधित करने का प्रयास किया लेकिन समाप्त हुआ - 'tuple' object does not support item assignment

इससे भी अधिक है.. पायथन में एक अद्भुत बिल्ट-इन टूल है जिसे NamedTuple कहा जाता है। यह एक क्लास है जिसे आप कंस्ट्रक्टर बनाने के लिए विस्तारित कर सकते हैं। आइए प्रोग्रामेटिक रूप से समझें।

# पायथन के तरीके से ग्रैंड स्लैम खिताब पर एक साधारण क्लास बनाएं।
class GrandSlamsPythonWay:
    def __init__(self, player, titles):
        self.player = player
        self.titles = titles

stats = GrandSlamsPythonWay("Federer", 20)
print(f" *** स्टैट्स में विवरण हैं {stats.player} - {stats.titles}")

*** स्टैट्स में विवरण हैं Federer - 20

आपको क्या लगता है यह क्लास, क्या यह अपरिवर्तनीय है? आइए फेडरर को नडाल में बदलकर जांचते हैं।

stats.player = 'Nadal'
print(f" *** स्टैट्स में विवरण हैं {stats.player} - {stats.titles}")

*** स्टैट्स में विवरण हैं Nadal - 20

तो कोई आश्चर्य नहीं यह एक अपरिवर्तनीय डेटा संरचना है क्योंकि हम फेडरर को नडाल में अपडेट करने में सक्षम हैं। अब आइए NamedTuple के साथ एक क्लास बनाएं और देखें कि इसका डिफ़ॉल्ट व्यवहार क्या है।

from typing import NamedTuple
class GrandSlamsWithNamedTuple(NamedTuple):
    player: str
    titles: int

stats = GrandSlamsWithNamedTuple("Federer", 20)
print(f" *** स्टैट्स में विवरण हैं {stats.player} - {stats.titles}")
stats.player = 'Djokovic'
print(f" *** स्टैट्स में विवरण हैं {stats.player} - {stats.titles}")

*** स्टैट्स में विवरण हैं Federer - 20

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in 
10 print(f" *** स्टैट्स में विवरण हैं {stats.player} - {stats.titles}")
11 ----> 12 stats.player = 'Djokovic'
13 print(f" *** स्टैट्स में विवरण हैं {stats.player} - {stats.titles}")
AttributeError: can't set attribute

लगता है जोकोविच को 20 ग्रैंड स्लैम खिताब तक पहुंचने के लिए कुछ और समय इंतजार करना पड़ेगा।

हालांकि हम _replace विधि का उपयोग करके एक प्रति बना सकते हैं और _replace के दौरान मान अपडेट कर सकते हैं।

djokovic_stats = stats._replace(player="Djokovic", titles=17)
print(f" *** djokovic_stats में विवरण हैं {djokovic_stats.player} - {djokovic_stats.titles}")

*** djokovic_stats में विवरण हैं Djokovic - 17

उदाहरण

अंत में मैं एक उदाहरण दूंगा जिसमें ऊपर बताई गई सभी चीजें शामिल हैं।

इस उदाहरण के लिए, मान लें कि हम सब्जी की दुकान के लिए सॉफ्टवेयर लिख रहे हैं।

from typing import Tuple
# एक खरीद को दर्शाने के लिए एक क्लास बनाएं
class Prices(NamedTuple):
    id: int
    name: str
    price: int  # डॉलर में कीमत

# खरीद को ट्रैक करने के लिए एक क्लास बनाएं
class Purchase(NamedTuple):
    purchase_id: int
    items: Tuple[Prices]

# सब्जी आइटम और उनकी संबंधित कीमतें बनाएं
carrot = Prices(1, "carrot", 2)
tomato = Prices(2, "tomato", 3)
eggplant = Prices(3, "eggplant", 5)

# अब मान लें कि हमारे पहले ग्राहक मिस्टर टॉम ने गाजर और टमाटर खरीदे
tom_order = Purchase(1, (carrot, tomato))

# मिस्टर टॉम से वसूलने के लिए कुल लागत जानने के लिए
total_cost = sum(item.price for item in tom_order.items)
print(f"*** मिस्टर टॉम से कुल लागत है - {total_cost}$")

आउटपुट

*** मिस्टर टॉम से कुल लागत है - 5$

  1. पायथन में मीन शिफ्ट एल्गोरिदम को लागू करना पायथन में मीन शिफ्ट एल्गोरिदम को लागू करना

    मशीन लर्निंग में कई प्रकार के क्लस्टरिंग एल्गोरिदम होते हैं। इन एल्गोरिदम को पायथन में लागू किया जा सकता है। इस लेख में, आइए मीन-शिफ्ट एल्गोरिदम पर चर्चा करें और इसे पायथन का उपयोग करके लागू करें। यह एक क्लस्टरिंग एल्गोरिदम है जिसका उपयोग अनसुपरवाइज़्ड लर्निंग मेथड के रूप में किया जाता है। इस एल्गो

  1. पायथन में नॉन-लीनियर डेटा को मॉडल में कैसे फिट करें पायथन में नॉन-लीनियर डेटा को मॉडल में कैसे फिट करें

    हम Seaborn लाइब्रेरी का उपयोग करेंगे, जो डेटा विज़ुअलाइज़ करने में मदद करती है। जब रिग्रेशन मॉडल बनाए जाते हैं, तो मल्टीकॉलीनियरिटी की जांच की जाती है। ऐसा इसलिए क्योंकि हमें सभी विभिन्न सतत चर के संयोजनों के बीच मौजूद सहसंबंध को समझने की आवश्यकता होती है। यदि चर के बीच मल्टीकॉलीनियरिटी मौजूद है, तो

  1. पायथन में चार्ट्स में लीजेंड (दंतकथा) जोड़ने का तरीका पायथन में चार्ट्स में लीजेंड (दंतकथा) जोड़ने का तरीका

    परिचय चार्ट का मुख्य उद्देश्य डेटा को आसानी से समझाना है। जब ग्राफ में बहुत सारी जानकारी हो, तो लीजेंड (दंतकथा) प्रासंगिक जानकारी प्रदर्शित करके समझ में सुधार करती है। Matplotlib में लीजेंड जोड़ना 1. डेटा तैयार करें import matplotlib.pyplot as plt mobile = [iPhone, Galaxy, Pixel] units_sold = ((