Skip to content
Advertisement

How can I remove two or more objects of a list from a single input in Python?

This is my sample database:

Sample database copy.png

In my script now, I am adding elements to the list with the following code:

import pandas
data = pandas.read_excel("Sample database copy.xlsx")
name = dict(zip(data["Abbreviation"],data["Name"]))
list1 = []
incoming_msg = input('Please type what you want to add: ')
incoming_msg = incoming_msg.split() # split the string by space
if len(incoming_msg) == 2: # if there are two elements in the list (number and name)
    list1 += [name[incoming_msg[1]]] * int(incoming_msg[0])
else:
    list1.append(name[incoming_msg[0]])

So now if type “2 JO” my list will have two new elements “John” and “John”.

Now I want to do exactly the same but for eliminating objects of a list. I tried to replace the current operator “+=” for “-=” but surprisingly it is not working. Any ideas on how I could solve this?

PS. I need to do it all out of the same input. I cannot ask separately for key and quantity. I want to make a replication of the above code but for removing the objects.

Advertisement

Answer

You could use list.remove():

Remove the first item from the list whose value is equal to x. It raises a ValueError if there is no such item.

import pandas as pd

data = pd.read_excel("Sample database copy.xlsx")
name = dict(zip(data["Abbreviation"], data["Name"]))
list1 = []

incoming_msg = input('Please type what you want to add: ')
incoming_msg = incoming_msg.split()  # split the string by space
if len(incoming_msg) == 2:  # if there are two elements in the list (number and name)
    list1 += [name[incoming_msg[1]]] * int(incoming_msg[0])
else:
    list1.append(name[incoming_msg[0]])

print('n'.join(list1))

incoming_msg = input('Please type what you want to delete: ')
incoming_msg = incoming_msg.split()  # split the string by space
if len(incoming_msg) == 2:  # if there are two elements in the list (number and name)
    num_to_remove = int(incoming_msg[0])
    while name[incoming_msg[1]] in list1 and num_to_remove > 0:
        list1.remove(name[incoming_msg[1]])
        num_to_remove -= 1
else:
    if name[incoming_msg[0]] in list1:
        list1.remove(name[incoming_msg[0]])

print('n'.join(list1))

Example Usage:

Please type what you want to add: 4 JO
John
John
John
John
Please type what you want to delete: 2 JO
John
John
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement