<p>我有两个名称列表,<code>names_1</code>和<code>names_2</code>,它们都是相同长度的(1000),没有任何列表有重复的名称,每个列表包含1000个唯一的名称,但有些名称出现在两个列表中,我想在第三个列表中分离两个列表中出现的名称<code>dup_names</code>,并将它们从原始列表中删除,我尝试了以下代码,但无效:</p>
<pre><code>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))
</code></pre>
<p>我创建了“比较”列表来检查<code>(i,k)</code>值之间的比较,结果是:</p>
<pre><code>(0,0)
(0,1)
.
.
.
(0,999)
len(COMPARED) = 1000
len(dup_names) = 0
len(names_1) = 1000
len(names_2) = 1000
</code></pre>
<p>从打印出来的i_k_对中,我看到它只比较了<code>names_1</code>{<cd6>}中的第一个名字和<code>names_2</code>中的所有名字,因为<code>len(dup_names) = 0</code>、<code>len(names_1) = 1000</code>和<code>len(names_2) = 1000</code>,我认为<code>len(COMPARED) = 1000000</code>但是看起来这是一个外环的问题,有人能解释一下我的问题吗</p>
<p>我知道我可以用以下代码完成这项工作:</p>
<pre><code>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
</code></pre>
<p>我尝试了这段代码,效果很好,但真正让我困惑的是:
第一个代码有什么问题???
为什么外部while循环不工作?!
Python中嵌套的while循环有问题吗</p>
<p>使用Pythonic方法和set来解决您的问题</p>
<pre><code>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]
</code></pre>