我有两个名称列表,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_对中,我看到它只比较了names_1
{names_2
中的所有名字,因为len(dup_names) = 0
、len(names_1) = 1000
和len(names_2) = 1000
,我认为len(COMPARED) = 1000000
但是看起来这是一个外环的问题,有人能解释一下我的问题吗
我知道我可以用以下代码完成这项工作:
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循环有问题吗
使用Pythonic方法和set来解决您的问题
这是比较两个列表中的重复项,而不会比较名称_1中已比较的任何内容。我认为可能会有一个很好的优化。如果要比较两个列表len(names_1)乘以len(names_2),最好避免从names_1和names_2中删除元素。代码不起作用的原因是,代码没有在第二个while循环后重新设置i=0以从头开始名称_1
相关问题 更多 >
编程相关推荐