2015-12-23 6 views
5

मैं अनुक्रम 'में' किसी आइटम की 'x' की अंतिम घटना को खोजना चाहता हूं, या किसी को वापस लौटने की इच्छा नहीं है और पहले आइटम की स्थिति बराबर नहीं है 0सूची में किसी आइटम की आखिरी घटना को ढूंढना python

को यह मैं वर्तमान में क्या है:

def PositionLast (x,s): 

    count = len(s)+1 
    for i in s: 
     count -= 1 
     if i == x: 
      return count 
    for i in s: 
     if i != x: 
      return None 

जब मैं कोशिश:

>>>PositionLast (5, [2,5,2,3,5]) 
>>> 4 

यह सही जवाब है। लेकिन जब मैं 2 के बजाय 5 करने के लिए 'एक्स' को बदलने मैं इस मिल:

>>>PositionLast(2, [2,5,2,3,5]) 
>>> 5 

जवाब यहाँ होना चाहिए 2. मैं, यह कैसे हो रहा है के रूप में उलझन में हूँ कि मैं क्या करने की जरूरत है, तो किसी को समझा सकता है सही मैं आभारी होंगे। मैं इसे सबसे बुनियादी कोड के साथ पूरा करना भी चाहूंगा।

धन्यवाद।

+0

संभावित डुप्लिकेट [पायथन में किसी सूची में कुछ मूल्य की पहली और अंतिम अनुक्रमणिका ढूंढना] (http://stackoverflow.com/questions/522372/finding-first-and-last-index-of-some-value- में एक सूची में अजगर) –

उत्तर

1
def positionLast(x, L): 
    answer = None 
    for i,e in enumerate(L): 
     if e==x: answer = i 
    return answer 
5

यह अफ़सोस की बात है सूचियों एक rindex विधि की जरूरत नहीं है, लेकिन आप index इस्तेमाल कर सकते हैं:

last = len(s) - s[::-1].index(x) - 1 

या समतुल्य रूप

for i, v in enumerate(reversed(s)): 
    if v == x: 
     last = len(s) - i - 1 
     break 
3

आपका तर्क, सही नहीं है क्योंकि आप गिनती वापसी यदि i==x और आपके फ़ंक्शन के पीछे एक अतिरिक्त लूप है।

इसके बजाय

आप अपनी सूची की गणना के विपरीत रूपों पर पाश और पहली घटना के सूचकांक वापसी:

def PositionLast (x,s): 
    return next(i for i,j in list(enumerate(s))[::-1] if j == x) 

डेमो:

print PositionLast (2, [2,5,2,3,5,3]) 
2 
print PositionLast (3, [2,5,2,3,5,3]) 
5 
print PositionLast (5, [2,5,2,3,5,3]) 
4 
2

आपका कोड गलत है, इसे से सूची की जांच कर रहा है पहले मैच में शुरुआत और रोकना, आप जो चाहते हैं वह सूची को रिवर्स ऑर्डर में देखना है।

def PositionLast (x,s): 
    count = len(s) 
    for i in s[::-1]: 
     count -= 1 
     if i == x: 
      return count 
    return None 

में आप सबसे पहले आप केवल संयोग की वजह से सही जवाब देता है:
- गिनता बराबर 5 जब पहला आइटम के लिए जाँच।
- दूसरे आइटम की जांच करते समय बराबर 4 की गणना करता है, यह मेल खाता है, फिर वापस लौटें।
- संयोग से, यह आपके अंतिम आइटम का सूचकांक है।

2

रिवर्स ऑर्डर में इटरेट सूची और फिर एक्स की जांच करें। यह सूची को उलटाने के रूप में एक प्रभावी तरीका हो सकता है और फिर शुरुआत से इंडेक्स ढूंढना संसाधन गहन है।

def PositionLast (x,s): 
    for i in range(len(s)-1,0,-1): 
     if s[i] == x: 
      return i 
    return None 
0
def positionLast(x, L): 
    try: return max(i for i,e in enumerate(L) if e==x) 
    except: return None 
0

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

def PositionLast(x,s): 

    count = -1 
    position = None 
    for i in s: 
     count += 1 
     if i == x: 
      position = count 
    return position 

यह मेरी सभी परीक्षणों के लिए सही जवाब देता है:

यहाँ अंतिम कोड है।

धन्यवाद, ईमर।

संबंधित मुद्दे