我在Python中有这样的列表:
mylist = [13, 8, 7, 5, 6, 3, 9]
我想检查列表中的每个元素,它是否大于或等于前面的元素。如果这是真的,我想添加1并检查它是否等于先前元素。如果发生这种情况,请添加数字直到不再适用。
我希望你能理解,我想要存档的内容。 mylist的输出将是
outputlist = [13, 8, 7, 5, 9, 3, 10]
所以来自6
的{{1}}大于mylist
所以它会添加5
,现在它已经存在1
。因此,它会添加另一个7
(值= 1
)和另一个8
(值= 1
)。
注意:顺序很重要,因此排序9
不是一种选择。
答案 0 :(得分: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]