Python में जांचना कि सूची में सभी 'y' मान 'x' मान के बाद आते हैं (यानी y का पहला occurrence, x के पहले occurrence के बाद हो)।
समस्या
सूची: [11, 25, 13, 11, 64, 25, 8, 9], x=13, y=8
x=13 इंडेक्स 2 पर है, y=8 इंडेक्स 6 पर है। चूंकि 6 > 2, सभी y, x के बाद हैं।
उदाहरण
my_list = [11, 25, 13, 11, 64, 25, 8, 9]
print("मूल सूची:", my_list)
x, y = 13, 8
print(f"x = {x}, y = {y}")
# x का पहला इंडेक्स खोजें
try:
x_index = my_list.index(x)
print(f"x का पहला इंडेक्स: {x_index}")
except ValueError:
print(f"x={x} सूची में नहीं मिला")
x_index = -1
# जांचें: क्या कोई y, x से पहले है?
my_result = True
for index, element in enumerate(my_list):
if element == y and index < x_index:
my_result = False
break
if my_result:
print("सभी y तत्व x के बाद आते हैं")
else:
print("कुछ y तत्व x से पहले हैं")
आउटपुट
मूल सूची: [11, 25, 13, 11, 64, 25, 8, 9]
x = 13, y = 8
x का पहला इंडेक्स: 2
सभी y तत्व x के बाद आते हैं
संक्षिप्त और पायथनिक तरीके
1. index() + any()
def all_y_after_x(lst, x, y):
try:
x_idx = lst.index(x)
# x के पहले कोई y है?
return not any(elem == y for elem in lst[:x_idx])
except ValueError:
return False # x नहीं मिला
print(all_y_after_x([11, 25, 13, 11, 64, 25, 8, 9], 13, 8)) # True
print(all_y_after_x([8, 11, 25, 13], 13, 8)) # False (8 इंडेक्स 0 पर)
print(all_y_after_x([11, 25, 13], 13, 8)) # True (y नहीं है)
print(all_y_after_x([11, 25], 13, 8)) # False (x नहीं है)
2. अगला इंडेक्स खोजकर
def all_y_after_x_v2(lst, x, y):
try:
x_idx = lst.index(x)
# x के बाद पहला y खोजें
try:
y_idx = lst.index(y, x_idx + 1) # x के बाद से खोजें
return True # y, x के बाद मिला
except ValueError:
return True # y सूची में नहीं है (vacuously true)
except ValueError:
return False # x नहीं मिला
3. अंतिम x और पहला y तुलना
def all_y_after_x_v3(lst, x, y):
"""अंतिम x के बाद पहला y होना चाहिए"""
try:
last_x = len(lst) - 1 - lst[::-1].index(x) # अंतिम x का इंडेक्स
first_y = lst.index(y) # पहला y का इंडेक्स
return first_y > last_x
except ValueError:
return False # x या y नहीं मिला
# टेस्ट
test_cases = [
([11, 25, 13, 11, 64, 25, 8, 9], 13, 8), # True
([8, 13, 8], 13, 8), # False (पहला 8, 13 से पहले)
([13, 8, 13, 8], 13, 8), # False (पहला 8, अंतिम 13 से पहले)
([13, 13, 8, 8], 13, 8), # True
([1, 2, 3], 13, 8), # False (x नहीं)
([1, 2, 3], 1, 8), # True (y नहीं)
]
for lst, x, y in test_cases:
print(f"{lst}, x={x}, y={y}: {all_y_after_x_v3(lst, x, y)}")
आउटपुट
[11, 25, 13, 11, 64, 25, 8, 9], x=13, y=8: True
[8, 13, 8], x=13, y=8: False
[13, 8, 13, 8], x=13, y=8: False
[13, 13, 8, 8], x=13, y=8: True
[1, 2, 3], x=13, y=8: False
[1, 2, 3], x=1, y=8: True
व्याख्या: "सभी y, x के बाद" का अर्थ
- व्याख्या 1 (मूल लेख): x के पहले occurrence के बाद सभी y हों
- व्याख्या 2 (सख्त): x के अंतिम occurrence के बाद सभी y हों
- व्याख्या 3: पहला y, अंतिम x के बाद हो
सबसे सामान्य व्याख्या: पहला y, पहले x के बाद हो (मूल लेख का दृष्टिकोण)।
Pandas Series में उपयोग
import pandas as pd
s = pd.Series([11, 25, 13, 11, 64, 25, 8, 9])
x, y = 13, 8
try:
x_idx = s[s == x].index[0]
y_before_x = ((s == y) & (s.index < x_idx)).any()
print(f"सभी y, x के बाद? {not y_before_x}")
except IndexError:
print("x नहीं मिला")