по сути, вам нужен шаблон, этот шаблон - не что иное, как порядок, в котором мы нашли уникальные числа при обходе list x
, например: if x = [4,3,1,3,5]
, тогда pattern = 4 3 1 5
, и теперь это поможет нам заполнить * 1004.* снова так, что output will be [4,3,1,5,3]
from collections import defaultdict
x = [1,2,2,3,3,3,4,4]
counts_dict = defaultdict(int)
for p in x:
counts_dict[p]+=1
i =0
while i < len(x):
for p,cnt in counts_dict.items():
if i < len(x):
if cnt > 0:
x[i] = p
counts_dict[p]-=1
i+=1
else:
continue
else:
# we have placed all the 'p'
break
print(x) # [1, 2, 3, 4, 2, 3, 4, 3]
примечание: python 3.6+ dict уважает порядок вставки, и я предполагаю, что вы используете python3.6 +.
Это то, о чем я думал вначале, но в некоторых случаях ничего не получается ..
'''
x = [3,7,7,7,4]
i = 1
while i < len(x):
if x[i] == x[i-1]:
x.append(x.pop(i))
i = max(1,i-1)
else:
i+=1
print(x) # [1, 2, 3, 4, 2, 3, 4, 3]
# x = [2,2,3,3,3,4,4]
# output [2, 3, 4, 2, 3, 4, 3]
# x = [3,7,1,7,4]
# output [3, 7, 1, 7, 4]
# x = [3,7,7,7,4]
# output time_out
'''