2015-06-15 186 views
-4

我在Python這樣的列表更大:檢查是否列表元素是比以前的元素

mylist = [13, 8, 7, 5, 6, 3, 9] 

我想檢查列表中的每個元素,無論是大於或等於先前的元素。如果這是真的,我想加1,並檢查它是否等於先前的元素。如果發生這種情況,直到它不再是真的。

我希望你能理解我要存檔的東西。對於MYLIST輸出將

outputlist = [13, 8, 7, 5, 9, 3, 10] 

所以從mylist6大於5所以它增加了1,現在是7,它已經存在。所以它增加了另一個1(值= 8)和另一個1(值= 9)。

的「9」從初始列表等於新鮮計算9,所以它增加了1

注:順序是重要的,所以排序mylist不是一個選項。

+4

你有什麼想法? SO不是代碼編寫服務,請顯示您的編碼工作和錯誤 – EdChum

+2

*已經存在*您的意思是*列表中的任何位置*或僅*該值之前的任何位置*? –

+1

如果它是(通過傳遞性)已經大於之前的所有先前的元素,那麼它在加入一個之後又如何等於先前的元素?啊,現在我明白了...... –

回答

1

不是很漂亮,但我沒有找到一個簡短的方法來做到這一點。似乎工作,但。

def magic(lst): 
    lst = lst[:] # create copy 
    seen = set() # prior values as set 
    for i in range(len(lst)): 
     if any(lst[i] >= x for x in lst[:i]): # greter/equal than any prior 
      lst[i] += 1  # first increment 
      while lst[i] in seen: 
       lst[i] += 1 # increment more 
     seen.add(lst[i])  # add to prior set 
    return lst 

例子:

>>> magic([9, 9, 9, 9]) 
[9, 10, 11, 12] 
>>> magic([13, 8, 7, 5, 6, 3, 9]) 
[13, 8, 7, 5, 9, 3, 10] 
+0

@詹姆斯米爾斯Whops ......給我第二個......如果它大於/等於「任何」前一個元素,那麼它就沒有足夠的了。現在修復。 –

+0

這已經非常有幫助,我會盡力爲我的問題解決它。 非常感謝! – pookpash

相關問題