list.remove() 在嵌套的 for 循环中
list.remove() within nested for loops
我有两个列表,想检查第一个列表中的元素是否在第二个列表中。
如果为真,我想从第一个列表的副本中删除匹配的元素。
my_list = [
'100a',
'100b',
'100c'
]
your_list = [
'100a_nnb',
'100b_ub',
'100c_AGGtb'
]
my_list_2 = my_list
for i in my_list:
for j in your_list:
if i in j:
print(f'Yes, {i} is in {j}!')
#my_list_2.remove(i)
break
else:
print(f'No, {i} is not in {j}!')
当我离开 my_list_2.remove(i)
评论时,我得到了预期的结果:
Yes, 100a is in 100a_nnb!
No, 100b is not in 100a_nnb!
Yes, 100b is in 100b_ub!
No, 100c is not in 100a_nnb!
No, 100c is not in 100b_ub!
Yes, 100c is in 100c_AGGtb!
当我删除 # 它给我:
Yes, 100a is in 100a_nnb!
No, 100c is not in 100a_nnb!
No, 100c is not in 100b_ub!
Yes, 100c is in 100c_AGGtb!
这是为什么?似乎它跳过了第二个列表项。
问题在于用于创建第一个列表副本的这一行。这里两个变量都引用内存中的同一个列表,而不是创建副本。
my_list_2 = my_list
因此,当您从“复制”列表中删除值时,您将删除原始列表中的值。
为了创建原始列表的副本,使用 copy() 方法
my_list_2 = my_list.copy()
解决方案
[我]: my_list_2 = my_list.copy()
[二]: my_list_2 = my_list[::]
备注:
通过关注您只是将 my_list_2 引用到 my_list。
my_list_2 = my_list
如果您检查 id(my_list_2)
和 id(my_list)
,您将拥有相同的 ID。
我有两个列表,想检查第一个列表中的元素是否在第二个列表中。 如果为真,我想从第一个列表的副本中删除匹配的元素。
my_list = [
'100a',
'100b',
'100c'
]
your_list = [
'100a_nnb',
'100b_ub',
'100c_AGGtb'
]
my_list_2 = my_list
for i in my_list:
for j in your_list:
if i in j:
print(f'Yes, {i} is in {j}!')
#my_list_2.remove(i)
break
else:
print(f'No, {i} is not in {j}!')
当我离开 my_list_2.remove(i)
评论时,我得到了预期的结果:
Yes, 100a is in 100a_nnb!
No, 100b is not in 100a_nnb!
Yes, 100b is in 100b_ub!
No, 100c is not in 100a_nnb!
No, 100c is not in 100b_ub!
Yes, 100c is in 100c_AGGtb!
当我删除 # 它给我:
Yes, 100a is in 100a_nnb!
No, 100c is not in 100a_nnb!
No, 100c is not in 100b_ub!
Yes, 100c is in 100c_AGGtb!
这是为什么?似乎它跳过了第二个列表项。
问题在于用于创建第一个列表副本的这一行。这里两个变量都引用内存中的同一个列表,而不是创建副本。
my_list_2 = my_list
因此,当您从“复制”列表中删除值时,您将删除原始列表中的值。
为了创建原始列表的副本,使用 copy() 方法
my_list_2 = my_list.copy()
解决方案
[我]: my_list_2 = my_list.copy()
[二]: my_list_2 = my_list[::]
备注:
通过关注您只是将 my_list_2 引用到 my_list。
my_list_2 = my_list
如果您检查 id(my_list_2)
和 id(my_list)
,您将拥有相同的 ID。