0

I know it is maybe a duplicate question. But due to my poor English expression,I don't know how to search it.

Recently I find a problem in python list.remove,Here is the code:

data = []
for i in range(1000):
    Tempdict = {}
    Tempdict["code"] = str(i)
    data.append(Tempdict)

codes_to_keep = ("1","8","80")
for i in data:
    if not i["code"] in codes_to_keep:
        data.remove(i)

print(data) #{"code":"1","code":"3","code":"5".......},it will keep odd number leave.

Or if I use this to delete number which need to be de:

data = []
for i in range(1000):
    Tempdict = {}
    Tempdict["code"] = str(i)
    data.append(Tempdict)

codes_to_delete = ("1","8","80")
for i in data:
    if i["code"] in codes_to_delete:
        data.remove(i)

print(data) #{"code":"0","code":"2"xxx},This is what I expected 

What happened?

Jongware
  • 22,200
  • 8
  • 54
  • 100
jizhihaoSAMA
  • 12,336
  • 9
  • 27
  • 49

1 Answers1

0

For the proper answer,

data = []
for i in range(1000):
    Tempdict = {}
    Tempdict["code"] = str(i)
    data.append(Tempdict)


codes_to_keep = ("1","8","80")
# for i in data:
#     if not i["code"] in codes_to_keep:
#         data.remove(i)

data = list(item for item in data if item["code"] in codes_to_keep)

print(data)
[{'code': '1'}, {'code': '8'}, {'code': '80'}]

Arun Augustine
  • 1,690
  • 1
  • 13
  • 20