我有一个以list形式的数字列表,我想将list元素与字典值进行比较
我以两种方式尝试了该解决方案。
lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}
expected output : after removing unwanted elemnts from list[47, 69, 76, 97]
method 1: ( Success)
lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}
for i in lr:
if i in di.values():
ln.append(i)
print(ln)
===============success========================
**********************************************
Method 2: (Failed)
lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}
for i in lr:
if i in di.values():
pass
else:
lr.remove(i)
print(lr)
==================failed=======================
for method 2 i am getting result as [47, 69, 76, 88, 88, 97]
not sure what wrong in the method 2
答案 0 :(得分:0)
对第二种方法进行一些修改将为您带来预期的结果。
lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}
for i in lr[:]: # note the slice notation for creating a copy of list
if i in di.values():
pass
else:
lr.remove(i)
print(lr)
获取错误值的原因是因为您在迭代列表时修改了列表,如@Lior Cohen指出的那样。
在这里,我添加了其他打印语句以显示您的列表到底发生了什么。观察每次迭代,您将了解为什么在迭代时更改列表是个坏主意。
lr =[47, 64, 69, 37, 76, 83, 95, 97]
di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason':97}
for index, i in enumerate(lr):
print('Value:',i, 'Index:', index)
if i in di.values():
pass
else:
lr.remove(i)
print('List:', lr)
# Output
Value: 47 Index: 0
List: [47, 64, 69, 37, 76, 83, 95, 97]
Value: 64 Index: 1
List: [47, 69, 37, 76, 83, 95, 97]
Value: 37 Index: 2
List: [47, 69, 76, 83, 95, 97]
Value: 83 Index: 3
List: [47, 69, 76, 95, 97]
Value: 97 Index: 4
List: [47, 69, 76, 95, 97]