Более pythonic подход будет состоять в использовании set
s и составлении списка.
name1 = "naveen"; name2 = "darshana"
name1_set=set(name1)
name2_set=set(name2)
clean1=[x for x in name1 if x not in name2_set]
clean2=[x for x in name2 if x not in name1_set]
clean1.extend(['0']*(len(name1)-len(clean1)))
clean2.extend(['1']*(len(name2)-len(clean2)))
print clean1,clean2
set
дает нам O (1) поисков, тем самым ускоряя весь процесс, делая его O (N) вместо O (N ^ 2).
РЕДАКТИРОВАТЬ: В свете вашего последующего комментария, что количество случаев имеет значение, это обновленная версия, которая учитывает это.
name1 = "naveen"; name2 = "darshana"
count1={}
count2={}
for x in name1:
count1[x]=count1.get(x,0)+1
for x in name2:
count2[x]=count2.get(x,0)+1
def remove_dups(name,count,null):
clean=[]
for x in name:
if count.get(x,0):
count[x]-=1
else:
clean.append(x)
clean.extend([null]*(len(name)-len(clean)))
return clean
clean1=remove_dups(name1,count2,'0')
clean2=remove_dups(name2,count1,'1')
print clean1,clean2
Он использует dict
s, чтобы вести подсчет случаев. Всякий раз, когда персонаж удаляется, соответствующий счетчик для другого имени уменьшается. Сложность все еще O (N).
Он печатает ['v', 'e', 'e', 'n', '0', '0']
и ['d', 'r', 's', 'h', 'a', 'a', '1', '1']
. Это то, что вы хотели?