How to delete items in an array? (Python 3)

Asked

Viewed 425 times

0

I need to build a program where the user will be able to delete events from the event schedule, but the problem here is that when he deletes another event,I mean, after he has deleted the first one (an entire sublist/matrix, by the number indicated there next to the name), the position of the components within the matrix change position and cause the wrong component to be deleted, which the user did not enter... I only put 2 matrices here to show, but in the program there are many more.

 cienciatec = [['1-Nome do evento: Introdução a Data Science', 'Categoria: Palestra', 'Dia: Terça-feira', 'Horário: 9:00', 'Local: Sala 01', 'Número de vagas: 20', 'Informações: -'],['2-Nome do evento: Educação Inclusiva e o planejamento didático-pedagógico', 'Categoria: Palestra', 'Dia: Terça-feira', 'Horário: 9:00', 'Local: Sala 02', 'Número de vagas: 20']]
    while resp == 'A' or resp == 'E':
    if resp == 'E':
     print('Tecle o número correspondente ao evento que deseja excluir')
     exclui = int(input())
     cienciatec.pop(exclui-1)
    #imprime os dados do evento pulando linha
     for c in range(len(cienciatec)):
       for i in range(len(cienciatec[c])):
           print(cienciatec[c][i])
     #resto do programa
     print('Deseja efetuar alguma tarefa?')
     resp = input()

1 answer

2

May I suggest that you don’t work that way?

You clearly need an associative array for this program, the so-called dicionários in Python. That way, instead of associating the event name, or the event type to an arbitrary list position, you can associate it with "name", or "type".

Example:

cienciatec = [{
    'Número do evento': 1,
    'Nome do evento': 'Introdução a Data Science', 
    'Categoria': 'Palestra', 
    'Dia': 'Terça-feira', 
    'Horário': '9:00', 
    'Local': 'Sala 01', 
    'Número de vagas': 20, 
    'Informações': '-'
},{
    'Número do evento': 2,
    'Nome do evento': 'Educação Inclusiva e o planejamento didático-pedagógico', 
    'Categoria': 'Palestra', 
    'Dia': 'Terça-feira', 
    'Horário': '9:00', 
    'Local': 'Sala 02', 
    'Número de vagas': 20,
    'Informações': '-'
}]

This way you can access the name value with cienciatec[0]['Nome do evento'], cienciatec[1]['Nome do evento']...

You can also iterate over dictionaries with for

for evento in cienciatec:
    for i in evento:
        print(f'{i}: {evento[i]}')
    print('------')

Now for the solution of the problem. Instead of deleting a specific position in the list, use the number entered by the user to search for the match in the list and remove it.

 print('Tecle o número correspondente ao evento que deseja excluir')
 numero = int(input())

 #Procuro pelo dicionário que contém o índice "Número do evento" igual ao digitado pelo usuário
 a_excluir = next(evento for evento in cienciatec if evento["Número do evento"] == numero)
 cienciatec.remove(a_excluir)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.