2016-04-21 6 views
5

से मैं एक सूची (जो क्रमबद्ध किया जाता है) बना लिया है:निकालने संख्या सूची

indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33] 

मैं इस सूची है कि एक और सूची में एक दूसरे को और उन्हें इनपुट से कम से कम पांच की दूरी पर हैं से संख्या निकालना चाहते हैं । यह भ्रमित है। यह एक उदाहरण है कि मैं आउटपुट कैसे चाहता हूं:

outlist = [0, 7, 19, 25, 31] 

जैसा कि आप देख सकते हैं, कोई भी संख्या एक दूसरे के 5 के भीतर नहीं है।

मैं इस विधि की कोशिश की है:

for index2 in range(0, len(indexlist) - 1): 
     if indexlist[index2 + 1] > indexlist[index2] + 5: 
      outlist.append(indexlist[index2]) 

बहरहाल, यह मुझे इस उत्पादन देता है:

outlist = [0, 12, 19] 

ज़रूर, संख्या कम से कम 5 की दूरी पर हैं, हालांकि, मैं कुछ याद कर रहा हूँ आवश्यक मूल्य

मैं इस कार्य को कैसे पूरा कर सकते हैं के बारे में कोई भी विचार?

+0

"एक दूसरे से पांच दूर" का क्या मतलब है? पांच क्या? पदों या मूल्यवान? – Andrey

+0

@ एंड्री वैल्यू। उदाहरण की जांच करें, यह काफी स्पष्ट है। –

+0

@Andrey मूल्य के लिहाज से – interstellar

उत्तर

4

तुम बस निम्नलिखित मूल्य से तुलना नहीं अंतिम आइटम आप सूची में जोड़ा का ट्रैक रखने की जरूरत है,:

In [1]: indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33] 
In [2]: last = -1000 # starting value hopefully low enough :) 
In [3]: resultlist = [] 
In [4]: for item in indexlist: 
    ...:  if item > last+5: 
    ...:   resultlist.append(item) 
    ...:   last = item 
    ...: 
In [5]: resultlist 
Out[5]: [0, 7, 19, 25, 31] 
+0

यह पूरी तरह से काम करता है। बहुत बहुत धन्यवाद :) – interstellar

1

इस चाल करना चाहिए। यहाँ, के रूप में मैं टिप्पणी में कहा, outlistindexlist के पहले मान के साथ initialised और दोहराया indexlist तत्वों यह की तुलना में कर रहे हैं। यह एक मोटा समाधान है। लेकिन काम करता है।

indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33] 
outlist = [indexlist[0]] 

for index2 in range(1, len(indexlist) - 1): 
     if indexlist[index2] > (outlist[-1] + 5): 
      outlist.append(indexlist[index2]) 

उत्पादन:

>>outlist 

[0, 7, 19, 25, 31] 
0

मुझे लगता है अपने index_list क्रमबद्ध किया जाता है। फिर यह आपको केवल MIN_INDEX_OFFSET अलग इंडेक्स देगा।

MIN_INDEX_OFFSET = 5; 

index_list = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33]; 
last_accepted = index_list[0]; 
out_list = [last_accepted]; 

for index in index_list: 
    if index-last_accepted > MIN_INDEX_OFFSET: 
    out_list.append(index); 
    last_accepted = index; 

print(out_list) 
1

टिम पिट्ज़कर का जवाब सही है लेकिन यह एक अलग चर में अंतिम जोड़ा गया आइटम संग्रहीत किए बिना भी किया जा सकता है। इसके बजाय आप आउटलिस्ट में अंतिम मूल्य पढ़ सकते हैं:

>>> indexlist = [0, 7, 8, 12, 19, 25, 26, 27, 29, 30, 31, 33] 
>>> outlist = [] 
>>> for n in indexlist: 
...  if not outlist or n > outlist[-1] + 5: 
...   outlist.append(n) 
... 
>>> outlist 
[0, 7, 19, 25, 31] 
संबंधित मुद्दे