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

Python: सूची को लगातार तत्वों के लिए पुनर्क्रमित करना (Counter के साथ)

Python में collections.Counter का उपयोग करके सूची के तत्वों को उनकी आवृत्ति के अनुसार समूहबद्ध करना, जिससे समान तत्व एक साथ आ जाएं।

समस्या

सूची: [21, 83, 44, 52, 61, 72, 81, 96, 18, 44]

परिणाम: [21, 83, 44, 44, 52, 61, 72, 81, 96, 18] (44 लगातार आ गए)

उदाहरण

from collections import Counter

my_list = [21, 83, 44, 52, 61, 72, 81, 96, 18, 44]
print("मूल सूची:", my_list)

# Counter से आवृत्ति गिनें
freq = Counter(my_list)
print("आवृत्ति:", freq)  # Counter({44: 2, 21: 1, 83: 1, 52: 1, 61: 1, 72: 1, 81: 1, 96: 1, 18: 1})

# पुनर्क्रमित: प्रत्येक मान को उसकी गिनती के अनुसार दोहराएं
my_result = []
for value, count in freq.items():
    my_result.extend([value] * count)

print("पुनर्क्रमित सूची:", my_result)

आउटपुट

मूल सूची: [21, 83, 44, 52, 61, 72, 81, 96, 18, 44]
आवृत्ति: Counter({44: 2, 21: 1, 83: 1, 52: 1, 61: 1, 72: 1, 81: 1, 96: 1, 18: 1})
पुनर्क्रमित सूची: [21, 83, 44, 44, 52, 61, 72, 81, 96, 18]

महत्वपूर्ण नोट: क्रम अनिश्चित है

Counter.items() का क्रम सम्मिलन क्रम (Python 3.7+) या मनमाना हो सकता है। परिणाम में तत्वों का क्रम हर बार अलग हो सकता है।

क्रम बनाए रखने के संस्करण

1. मूल सूची में पहली उपस्थिति के क्रम में

def reorder_consecutive_preserve_order(lst):
    """पहली उपस्थिति के क्रम में समान तत्वों को समूहबद्ध करें"""
    from collections import OrderedDict
    
    # OrderedDict से क्रम बनाए रखते हुए गिनें
    freq = OrderedDict()
    for item in lst:
        freq[item] = freq.get(item, 0) + 1
    
    result = []
    for value, count in freq.items():
        result.extend([value] * count)
    return result

print("क्रम संरक्षित:", reorder_consecutive_preserve_order(my_list))
# [21, 83, 44, 44, 52, 61, 72, 81, 96, 18] - 44 पहली बार इंडेक्स 2 पर आया

2. आवृत्ति के अवरोही क्रम में (सबसे आम पहले)

def reorder_by_frequency(lst):
    """आवृत्ति के अनुसार क्रमबद्ध (सबसे आम पहले)"""
    freq = Counter(lst)
    # most_common() आवृत्ति के अवरोही क्रम में लौटाता है
    result = []
    for value, count in freq.most_common():
        result.extend([value] * count)
    return result

print("आवृत्ति क्रम:", reorder_by_frequency(my_list))
# [44, 44, 21, 83, 52, 61, 72, 81, 96, 18] - 44 सबसे आम है

3. मान के अनुसार क्रमबद्ध

def reorder_sorted(lst):
    """मान के अनुसार क्रमबद्ध करके समूहबद्ध"""
    freq = Counter(lst)
    result = []
    for value in sorted(freq.keys()):
        result.extend([value] * freq[value])
    return result

print("मान क्रम:", reorder_sorted(my_list))
# [18, 21, 44, 44, 52, 61, 72, 81, 83, 96]

List Comprehension संस्करण

# एक लाइनर (क्रम अनिश्चित)
result = [val for val, cnt in Counter(my_list).items() for _ in range(cnt)]

# क्रम संरक्षित एक लाइनर (Python 3.7+ dict क्रम बनाए रखता है)
seen = set()
result_ordered = [
    val for val in my_list 
    if not (val in seen or seen.add(val))
    for _ in range(my_list.count(val))
]
# नोट: count() हर बार O(n) है, कुल O(n²) - बड़ी सूचियों के लिए धीमा

कुशल क्रम-संरक्षित संस्करण

def reorder_consecutive_efficient(lst):
    """O(n) समय, क्रम संरक्षित"""
    from collections import Counter
    freq = Counter(lst)
    seen = set()
    result = []
    for val in lst:
        if val not in seen:
            seen.add(val)
            result.extend([val] * freq[val])
    return result

print("कुशल क्रम-संरक्षित:", reorder_consecutive_efficient(my_list))

Pandas में उपयोग

import pandas as pd

s = pd.Series([21, 83, 44, 52, 61, 72, 81, 96, 18, 44])
# value_counts() आवृत्ति के अवरोही क्रम में देता है
freq = s.value_counts()
print("आवृत्ति:\n", freq)

# पुनर्क्रमित
result = []
for val, cnt in freq.items():
    result.extend([val] * cnt)
print("पुनर्क्रमित:", result)

उपयोग के मामले

  • डेटा संपीड़न / रन-लेंथ एन्कोडिंग तैयारी
  • कैश लोकैलिटी सुधारना (समान मान एक साथ)
  • सॉर्टिंग एल्गोरिदम में ऑप्टिमाइज़ेशन
  • दृश्यकरण के लिए डेटा समूहबद्ध करना
  1. - Python में सूची में लगातार तत्वों की जोड़ी

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

  1. - पायथन में रेंज में तत्व हटाएं

    पायथन से एकल तत्व को हटाना इंडेक्स और del फंक्शन का उपयोग करके सीधा है। लेकिन ऐसे परिदृश्य हो सकते हैं जब हमें इंडेक्स के एक समूह के लिए तत्वों को हटाने की आवश्यकता हो। यह लेख उन दृष्टिकोणों का पता लगाता है जिनसे केवल उन तत्वों को सूची से हटाया जाए जो इंडेक्स सूची में निर्दिष्ट हैं। sort और del का

  1. - Python में सूची का आकार ढूंढना

    सूची Python में एक संग्रह डेटा प्रकार है। सूची में तत्व परिवर्तनशील होते हैं और तत्वों से जुड़ा कोई विशिष्ट क्रम नहीं होता है। इस लेख में हम देखेंगे कि Python में सूची की लंबाई कैसे ढूंढें। जिसका अर्थ है कि हमें सूची में मौजूद तत्वों की संख्या प्राप्त करनी है चाहे वे डुप्लीकेट हों या नहीं।उदाहरणनीचे