我有兩個串列,想檢查第一個串列中的元素是否在第二個串列中。如果為真,我想從我的第一個串列的副本中洗掉匹配的元素。
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!
這是為什么?它似乎每隔一個串列項就會跳過一次。
uj5u.com熱心網友回復:
解決方案
[ 一世 ]: 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。
uj5u.com熱心網友回復:
問題在于用于創建第一個串列副本的這一行。這里不是創建副本,而是兩個變數參考記憶體中的同一個串列。
my_list_2 = my_list
因此,當您從“復制”串列中洗掉值時,您正在從原始串列中洗掉值。
為了創建原始串列的副本,請使用 copy() 方法
my_list_2 = my_list.copy()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/388322.html
