我有两个名字列表,names_1和names_2,它们都有相同的长度( 1000 ),没有列表有重复的名字,每个列表包含1000个唯一的名字,但有些名字出现在两个列表中,我想在第三个列表dup_names中隔离出现在两个列表中的名字,并从原始列表中删除它们,我尝试了以下代码,但它不起作用:
dup_names=[]
m=len(names_1)
i=0
k=0
COMPARED=[]
while i<m:
while k<m:
COMPARED.append((i,k))
if names_1[i]==names_2[k]:
dup_names.append(names_1[i])
names_1[i:i+1]=[]
names_2[k:k+1]=[]
m=m-1
k=0
else:
k=k+1
i=i+1
for i_k_pair in COMPARED:
print(i_k_pair)
print('len(COMPARED) =',len(COMPARED))
print('len(dup_names) =',len(dup_names))
print('len(names_1) =',len(names_1))
print('len(names_1) =',len(names_2))我创建了“比较”列表来检查(i,k)值之间的比较,输出是:
(0,0)
(0,1)
.
.
.
(0,999)
len(COMPARED) = 1000
len(dup_names) = 0
len(names_1) = 1000
len(names_2) = 1000从打印出来的i_k_pairs中,我看到它只比较了names_1 (i=0)中的第一个名字和names_2中的所有名字,因为len(dup_names) = 0,len(names_1) = 1000和len(names_2) = 1000,我解释了那个len(COMPARED) = 1000000,但它看起来是but循环的问题,有人能解释一下我有什么问题吗?!?!
我知道我可以用下面的代码来完成这项工作:
dup_names=[]
for i in range(len(names_1)):
for k in range(len(names_2)):
if names_1[i]==names_2[k]:
dup_names.append(names_1[i])
new_names_1=[]
new_names_2=[]
for n in range(len(names_1)):
s1=0
s2=0
for m in range(len(dup_names)):
if names_1[n]==dup_names[m]:
s1=1
if names_2[n]==dup_names[m]:
s2=1
if s1==0:
new_names_1.append(names_1[n])
if s2==0:
new_names_2.append(names_2[n])
names_1=new_names_1
names_2=new_names_2
del new_names_1,new_names_2我试过这个代码,它工作得很好,但真正让我困惑的是:第一个代码有什么问题?为什么外部的while循环不起作用?!Python中嵌套的while循环有问题吗?
发布于 2021-01-19 23:38:09
这是在比较两个列表中的重复项,而不是比较names_1中已经比较过的任何东西。我认为可能有一个很好的优化过的列表。如果你想比较两个列表len( names_1 )时间len( names_2 ),最好避免从names_1和names_2中删除元素。你的代码不能工作的原因是,你的代码没有重置i=0以在第二个while循环之后从头开始启动names_1。
dup_names=[]
names_1=["a","b","c","d","e"]
names_2=["f","g","h","a","d"]
m=len(names_1)
n=len(names_2)
i=0
k=0
COMPARED=[]
while i<m:
matched_any = False
while k<n:
COMPARED.append((i,k))
if names_1[i]==names_2[k]:
dup_names.append(names_1[i])
names_1[i:i+1]=[]
names_2[k:k+1]=[]
matched_any = True
break
else:
k=k+1
i=0
k=0
if not matched_any:
names_1[i:i+1]=[]
m=len(names_1)
n=len(names_2)
for i_k_pair in COMPARED:
print(i_k_pair)
print('len(COMPARED) =',len(COMPARED))
print('len(dup_names) =',len(dup_names))
print('len(names_1) =',len(names_1))
print('len(names_1) =',len(names_2))发布于 2021-01-19 22:57:07
使用Pythonic方法和set来解决您的问题。
x = ["C++", "C", "Python"]
y = ["Java", "C"]
z = set(x).intersection(set(y))
x = [elt for elt in x if elt not in z]
y = [elt for elt in y if elt not in z]https://stackoverflow.com/questions/65793865
复制相似问题