【问题标题】:Looping a list element against dictonary values根据字典值循环列表元素
【发布时间】:2019-09-08 19:45:15
【问题描述】:

我有一个列表形式的数字列表,我想将列表元素与字典值进行比较

我以两种方式尝试了解决方案。

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 

【问题讨论】:

  • 还有什么问题?
  • 您不应该在迭代列表时对其进行变异。如果你真的需要这样做,迭代 list(lr)
  • 明确说明您的问题或目标...比较后做什么?如果您已经有一个可行的方法,那么问题是什么?
  • @ Eden,当我使用 list.remove() 比较和删除不存在的元素时,它不起作用..所以我想知道在第二种方法中我的错误是什么我正在制作 .. 我正在比较 lr =[47, 64, 69, 37, 76, 83, 95, 97] di ={'Jhon':47, 'Emma':69, 'Kelly':76, 'Jason' :97}

标签: python dictionary arraylist


【解决方案1】:

对第二种方法稍作修改即可获得预期结果。

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2016-03-01
    相关资源
    最近更新 更多