更符合Python风格的做法是使用set
和列表推导。
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^2)降至O(N)。
编辑:考虑到您后来的评论中出现次数的问题,这是更新后的版本。
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
来记录出现次数。每当一个字符被删除时,另一个名称的相应计数会减少。复杂度仍为 O(N)。
它打印出 ['v', 'e', 'e', 'n', '0', '0']
和 ['d', 'r', 's', 'h', 'a', 'a', '1', '1']
。这是您想要的吗?
for ch in aString:
然后使用ch
比for i in range(len(aString)):
然后使用aString[i]
更受欢迎。 - Tyler