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

0

I need to build a program where the user might delete events from event programming, but the problem here is that when it deletes another event, I say, after having deleted the first one (a sublist / number indicated there next to the name), the position of the components inside the array change position and cause the wrong component to be deleted, which the user did not type ... I only put 2 arrays here to show, but in the program there are much more of them.

 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()
    
asked by anonymous 25.11.2018 / 20:06

1 answer

2

Can I suggest that you do not work this way?

You clearly need an associative array for this program, the so-called dicionários in Python. Thus, instead of associating the event name, or event type with an arbitrary position in the list, 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 about solving 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)
    
25.11.2018 / 20:44