Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Compare lists
#1
Hello,
I am using colab.research.google.com as an online IDE
The code should keep "72.311.312.90" in ips_logged, remove the rest and update.

# Chk if ips_logged has any allowed ips, if yes keep it, remove the rest & update.
ips_logged = ["192.143.234.52", "72.311.312.90", "10.110.12.132"]
allowed_ips = [ "192.32.322.12", "72.311.312.90", , "192.168.12.23"]
for i in allowed_ips:
  for x in ips_logged:
    if x == i:
      print("This ip: ", i, "__is Allowed")
    elif x != i:
      ips_logged.remove(x)
    print("Not allowed ips removed", x, "___List updated: ", ips_logged)
RESULT:
Not allowed ips removed 192.143.234.52 ___List updated: ['72.311.312.90', '10.110.12.132']
Not allowed ips removed 10.110.12.132 ___List updated: ['72.311.312.90']
Not allowed ips removed 72.311.312.90 ___List updated: []
Reply
#2
You could do something like this

ips_logged = ["192.143.234.52", "72.311.312.90", "10.110.12.132"]
allowed_ips = [ "192.32.322.12", "72.311.312.90", "192.168.12.23"]

tmp = []
for ip in allowed_ips:
    if ip in ips_logged:
        tmp.append(ip)

ips_logged = tmp

print(ips_logged)
one more way

ips_logged = ["192.143.234.52", "72.311.312.90", "10.110.12.132"]
allowed_ips = [ "192.32.322.12", "72.311.312.90", "192.168.12.23"]

tmp = ips_logged.copy()

for index, ip in enumerate(tmp):
    if ip in allowed_ips:
        print(f'Allowed: {ip}')
    else:
        print(f'Not Allowed: {ip}')
        ips_logged.remove(ip)
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#3
Big Grin 
Big Grin Thank you
I noticed I was missing 'else'

   

Thanks for your suggestions.
Reply
#4
You should never remove items from a list while iterating through it. This can cause all kinds of problems as you've seen. I suggest not removing items at all. It is almost always better to create a new list that only contains the items you want to keep.

In this example I use a list comprehension to build new lists.
ips_logged = ["192.143.234.52", "72.311.312.90", "10.110.12.132"]
allowed_ips = ["192.32.322.12", "72.311.312.90", "192.168.12.23"]

bad_addresses = [x for x in ips_logged if x not in allowed_ips]
ips_logged = [x for x in ips_logged if x in allowed_ips]

if len(bad_addresses) == 0:
    print("All logged addresses are allowed.")
else:
    print("Logged addresses that are not allowed:", ", ".join(bad_addresses))

if len(ips_logged) == 0:
    print("No logged addresses were allowed.")
else:
    print("Allowed logged addresses:", ", ".join(ips_logged))
In this example I do the same thing, but using sets.
ips_logged = ["192.143.234.52", "72.311.312.90", "10.110.12.132"]
allowed_ips = ["192.32.322.12", "72.311.312.90", "192.168.12.23"]

bad_addresses = list(set(ips_logged) - set(allowed_ips))
ips_logged = list(set(ips_logged) & set(allowed_ips))

if len(bad_addresses) == 0:
    print("All logged addresses are allowed.")
else:
    print("Logged addresses that are not allowed:", ", ".join(bad_addresses))

if len(ips_logged) == 0:
    print("No logged addresses were allowed.")
else:
    print("Allowed logged addresses:", ", ".join(ips_logged))
Skaperen likes this post
Reply
#5
I think it is best to make a third list as menator01 did. Keep the old ips_logged list unchanged, for possible future use.

It is definitely not a good idea to delete items from a list as you iterate over that list, as deanhystad said!

As an example:

from string import ascii_lowercase

allowed = [a for a in ascii_lowercase[0:7]
actual = [a for a in ascii_lowercase]
keep = [a for a in actual if a in allowed]
Reply
#6
Is this possible? You are banning a local lan to be connected to a network. And how does this work out?
Programs are like instructions or rules. Learning it gets us closer to a solution. Desired outcome. Computer talk.
Reply
#7
There is no banning going on. It is just a programming exercise.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Compare two lists (with intersections). wnesbv 0 1,038 Jul-06-2022, 09:07 AM
Last Post: wnesbv
  Split dict of lists into smaller dicts of lists. pcs3rd 3 2,524 Sep-19-2020, 09:12 AM
Last Post: ibreeden
  Compare Two Lists and Replace Items In a List by Index nagymusic 2 2,995 May-10-2020, 05:28 AM
Last Post: deanhystad
  Lists first item is a number however i cant compare it with an int getting syntax err Sutsro 4 2,511 Apr-22-2020, 10:22 AM
Last Post: Sutsro
  how to compare a list to a list of lists kevthew 1 1,868 Dec-22-2019, 11:43 AM
Last Post: ibreeden
  sort lists of lists with multiple criteria: similar values need to be treated equal stillsen 2 3,412 Mar-20-2019, 08:01 PM
Last Post: stillsen
  loop to compare lists KHas 1 1,748 Jan-31-2019, 10:17 PM
Last Post: Larz60+
  Lists-compare lists elhetch 7 5,818 Mar-01-2017, 02:50 PM
Last Post: buran

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020