2015-06-15 141 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

相关问题