У меня есть список списков, подобных этому:
[[10000, 10001, 10002, 115050, 11506,11786,11787, 11788], [12553,12554,10001,10002], [9500, 9501, 9502, 9503, 9759, 9760, 9761, 11778,11779, 11780, 11781,11782, 12112, 12113]]
Что я хочу сделать, так это найти дублирующиеся значения, которые есть в этих списках, и изменить их на 1 или 2 при необходимости, поэтомучто не будет дубликатов или совпадений вообще.Я не могу изменить их на случайные значения, потому что они являются пиксельными значениями, и их огромное изменение исказит мой результат.
Я пробовал что-то вроде этого:
even = [[10000, 10001, 10002, 115050, 11506,11786,11787, 11788], [12553,12554,10001,10002], [9500, 9501, 9502, 9503, 9759, 9760, 9761, 11778,11779, 11780, 11781,11782, 11788, 11789, 12112, 12113]]
if(len(even)>1):
inter = []
for i in range(len(even)-1):
#intersections = [set(even[i]).intersection(even[j]) for j in range(i+1, len(even)) ]
for j in range(i+1, len(even)-1):
intersect = list(set(even[i]).intersection(even[j]))
if len(intersect)>0:
for inte in intersect:
even[j][even[j].index(inte)] =even[j][even[j].index(inte)]+1
print("we changed the value here", index)
print(even)
Это вряд ли и приличнорешение, потому что оно терпит неудачу в этом самом примере.Я пытался сделать это с NumPy также.
length = len(sorted(even,key=len, reverse=True)[0])
y=np.array([xi+[None]*(length-len(xi)) for xi in even])
print( y, even)
y[:,1:] *=(np.diff(y,axis=1)!=0)
Однако этот код изменит дублирующиеся значения на 0, чего я не желаю.Любая помощь могла бы быть полезна.
Две вещи, на которые следует обратить внимание: ни в одном из списков внутри списка не должно быть повторяющихся значений, а измененное значение не должно иметь огромной разницы, 1,2 + или - в зависимостипосле, как мы можем уменьшить дублирование. Заранее спасибо.