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

Python: सूची में x से पहले आने वाले सभी y को हटाना

Python में सूची से उन सभी 'y' तत्वों को हटाना जो 'x' तत्व के पहले आते हैं। x के बाद आने वाले y को रखा जाता है।

समस्या

सूची: [4, 45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8], x=8, y=4

x=8 इंडेक्स 11 पर है। y=4 इंडेक्स 0 पर है (x से पहले)। इसलिए पहला 4 हटाया जाता है।

उदाहरण

my_list = [4, 45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8]
print("मूल सूची:", my_list)

a, b = 8, 4  # x=8, y=4
index_a = my_list.index(a)
print(f"x={a} का इंडेक्स: {index_a}")

# List comprehension + enumerate
my_result = [
    ele for index, ele in enumerate(my_list) 
    if ele != b or (ele == b and index > index_a)
]

print("परिणाम:", my_result)

आउटपुट

मूल सूची: [4, 45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8]
x=8 का इंडेक्स: 11
परिणाम: [45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8]

शर्त की व्याख्या

if ele != b or (ele == b and index > index_a)
```
अर्थ:
- यदि तत्व y (b) नहीं है → रखें
- यदि तत्व y (b) है → केवल तभी रखें जब उसका इंडेक्स x के इंडेक्स से बड़ा हो

फंक्शन के रूप में

def remove_y_before_x(lst, x, y):
    """x से पहले आने वाले सभी y को हटाएं"""
    try:
        x_idx = lst.index(x)
    except ValueError:
        return lst[:]  # x नहीं मिला, मूल सूची लौटाएं
    
    return [elem for i, elem in enumerate(lst) if elem != y or (elem == y and i > x_idx)]

# टेस्ट केस
test_cases = [
    ([4, 45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8], 8, 4),
    ([1, 2, 3, 2, 4, 2], 4, 2),        # x=4 इंडेक्स 4, y=2 इंडेक्स 1,3,5 → 1,3 हटें
    ([1, 2, 3], 5, 2),                  # x नहीं मिला → मूल
    ([2, 2, 2, 1], 1, 2),               # सभी 2, 1 से पहले → सभी हटें
    ([1, 2, 2, 2], 1, 2),               # सभी 2, 1 के बाद → सभी रहें
]

for lst, x, y in test_cases:
    print(f"x={x}, y={y}: {remove_y_before_x(lst, x, y)}")

आउटपुट

x=8, y=4: [45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8]
x=4, y=2: [1, 3, 4, 2]
x=5, y=2: [1, 2, 3]
x=1, y=2: [1]
x=1, y=2: [1, 2, 2, 2]

विविधताएं

1. x के अंतिम occurrence से पहले के y हटाएं

def remove_y_before_last_x(lst, x, y):
    """x के अंतिम occurrence से पहले के सभी y हटाएं"""
    try:
        last_x_idx = len(lst) - 1 - lst[::-1].index(x)
    except ValueError:
        return lst[:]
    
    return [elem for i, elem in enumerate(lst) if elem != y or (elem == y and i > last_x_idx)]

print(remove_y_before_last_x([2, 1, 2, 3, 2], 3, 2))  # [1, 3, 2] (अंतिम 2 रहता है)

2. पहला y जो x के बाद आता है, केवल उसे रखें

def keep_only_first_y_after_x(lst, x, y):
    """x के बाद पहला y रखें, बाकी y हटाएं"""
    try:
        x_idx = lst.index(x)
    except ValueError:
        return [elem for elem in lst if elem != y]  # x नहीं, सभी y हटाएं
    
    result = []
    y_kept = False
    for i, elem in enumerate(lst):
        if elem == y:
            if i > x_idx and not y_kept:
                result.append(elem)
                y_kept = True
            # else: छोड़ दें
        else:
            result.append(elem)
    return result

print(keep_only_first_y_after_x([4, 4, 4, 8, 4, 4], 8, 4))  # [8, 4] (पहला 4 जो 8 के बाद)

3. Pandas Series में

import pandas as pd

s = pd.Series([4, 45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8])
x, y = 8, 4

try:
    x_idx = s[s == x].index[0]
    mask = (s != y) | ((s == y) & (s.index > x_idx))
    result = s[mask].reset_index(drop=True)
    print("Pandas परिणाम:\n", result)
except IndexError:
    print("x नहीं मिला")
  1. - वाक्य में प्रत्येक शब्द को उल्टा करने का पायथन प्रोग्राम

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

  1. - Python में इंडेक्स लिस्ट को दूसरी लिस्ट से कैसे हटाएं?

    यहां हमारे पास दो लिस्ट हैं, L1 एक लिस्ट ऑब्जेक्ट जिससे कुछ एलिमेंट्स हटाए जाने हैं, और L2 जिसमें हटाए जाने वाले एलिमेंट्स के इंडेक्स हैं। >>> L1=[1, 2, 3, 4, 5, 6, 7, 8, 9] >>> L2=[2, 4, 6] L2 में सूचीबद्ध इंडेक्स पर एलिमेंट्स को हटाने के लिए, पहले हम L1 से enumerate ऑब्जेक्ट बनात

  1. - Python में इंडेक्स द्वारा लिस्ट से एलिमेंट कैसे हटाएं?

    इंडेक्स द्वारा लिस्ट से एलिमेंट हटाने के दो विकल्प हैं। del स्टेटमेंट का उपयोग करके, और pop() मेथड का उपयोग करके। del स्टेटमेंट को हटाए जाने वाले एलिमेंट के इंडेक्स की आवश्यकता होती है। >>> L1=[11,22,33,44,55,66,77] >>> del L1[2] >>> L1 [11, 22, 44, 55, 66, 77] बिल्ट-इन लि