Como retornar o índice de um elemento em uma lista? [RESOLVIDO]

1. Como retornar o índice de um elemento em uma lista? [RESOLVIDO]

Raphael Henrique
RaphaelHAS

(usa Outra)

Enviado em 27/08/2016 - 17:42h

Olá pessoal, venho tentando aprender Python porém existem alguns procedimentos que se diferenciam da linguagem de programação que tenho costume (C/C++). Tenho esse programa simples que verifica em uma lista números que são primos, preciso que seja impresso na tela o número e sua correspondente posição na lista (seu índice). Tentei fazer o programa com a função ".index(x)", porém não atende o que eu preciso, visto que essa função retorna a posição da primeira aparição do elemento na lista, e não a posição do elemento que eu estou testando.


#coding: utf-8

lista = [] #Cria uma lista vazia

primo = True #Cria uma variavel booleana inicializada com True

for i in range(5): #Preenche 5 elementos na lista
lista.append(int(input("Digite um numero ")))

for i in lista: #Percorre a lista
for j in range(2,i): #Foi criado esse segundo for para que o valor de J seja usado na verificação de um elemento primo
if((i%j) == 0): #Se um elemento for divisível por algum valor de J, ele não é primo
primo = False
break

if(primo): # Se o numero eh primo, entra na condição
print(str(i)+ " " + str(lista.index(i))) #Printa o número e sua primeira aparição na lista

#como retorna o indice da lista?

primo =True # Volta o valor de Primo pra True, para a proxima iteração


Alguém poderia me ajudar a obter a posição do elemento dentro do 2° if do programa?


  


2. MELHOR RESPOSTA

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 27/08/2016 - 19:58h

Entendi...

lista = []  # Cria uma lista vazia

for i in range(5): # Preenche 5 elementos na lista
lista.append(int(input("Digite um numero: ")))


def check_primo(num):
for x in range(2, num):
if num % x != 0:
return True
else:
return False

for i in range(len(lista)):
if check_primo(lista[i]):
print('Número: {}\t{}'.format(lista[i], i))


output:
Digite um numero: 17
Digite um numero: 19
Digite um numero: 11
Digite um numero: 12
Digite um numero: 14

Número: 17 0
Número: 19 1
Número: 11 2



----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------

3. Re: Como retornar o índice de um elemento em uma lista?

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 27/08/2016 - 19:23h

Então, parece que temos uns problemas aí!
Quando fazemos range(2,i) estamos dizendo para gerar números no range com início em 2 e final em "i", então se eu entrar com os números 1,2,3,4,5 o que vai acontecer é que o if lá que teste i%j só vai começar a partir do 3 que é o primeiro maior que o 2 que foi de onde eu mandei começar o range e o 5 vai ser testado mas não vai aparecer impresso como se ele não fosse primo.
De 1 a 5 os números primos são 2,3,5 mas só o 3 vai aparecer !!!
Quanto ao índice. Precisa mesmo dele? Em C é importante mas em Python só é preciso em casos específicos.
Mas se precisar pode usar o enumerate. Exemplo:

h = ['adeus', 'c++', 'ola', 'python']
for i, word in enumerate(h):
print (i, word)

Resultado:

0 adeus
1 c++
2 ola
3 python

Como pode ver 'i' fica com o indice e 'word' fica com o elemento da lista.

Abraço


4. Re: Como retornar o índice de um elemento em uma lista? [RESOLVIDO]

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 27/08/2016 - 19:27h

Desculpe mais fiquei confuso com sua pergunta, veja se é isso, se eu digitar 2 2 2 2 2 você quer que retorne sempre a primeira posição que o dois foi encontrado (ou na posição real no caso todas)

tipo assim:
Digite um numero 2
Digite um numero 3
Digite um numero 10
Digite um numero 49
Digite um numero 2

número: 2 na 1° posição da lista
número: 3 na 2° posição da lista
número: 2 na 1° posição da lista


A parte alterada está entre "===="

Ficaria assim
# coding: utf-8

lista = [] # Cria uma lista vazia

primo = True # Cria uma variavel booleana inicializada com True

for i in range(5): # Preenche 5 elementos na lista
lista.append(int(input("Digite um numero ")))

for i in lista: # Percorre a lista
for j in range(2,
i): # Foi criado esse segundo for para que o valor de J seja usado na verificação de um elemento primo
if ((i % j) == 0): # Se um elemento for divisível por algum valor de J, ele não é primo
primo = False
break

if (primo): # Se o numero eh primo, entra na condição
# ==============================================================================================================#
pos = lista.index(i)
print('número: %i na %i° posição da lista' % (i, pos + 1)) # Printa o número e sua primeira aparição na lista
# ==============================================================================================================#

primo = True # Volta o valor de Primo pra True, para a proxima iteração




----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


5. Vou tentar utilizar o enumerate()

Raphael Henrique
RaphaelHAS

(usa Outra)

Enviado em 27/08/2016 - 19:36h

Lisandro escreveu:

Então, parece que temos uns problemas aí!
Quando fazemos range(2,i) estamos dizendo para gerar números no range com início em 2 e final em "i", então se eu entrar com os números 1,2,3,4,5 o que vai acontecer é que o if lá que teste i%j só vai começar a partir do 3 que é o primeiro maior que o 2 que foi de onde eu mandei começar o range e o 5 vai ser testado mas não vai aparecer impresso como se ele não fosse primo.
De 1 a 5 os números primos são 2,3,5 mas só o 3 vai aparecer !!!
Quanto ao índice. Precisa mesmo dele? Em C é importante mas em Python só é preciso em casos específicos.
Mas se precisar pode usar o enumerate. Exemplo:

h = ['adeus', 'c++', 'ola', 'python']
for i, word in enumerate(h):
print (i, word)

Resultado:

0 adeus
1 c++
2 ola
3 python

Como pode ver 'i' fica com o indice e 'word' fica com o elemento da lista.

Abraço


Lisandro, obrigado pela dica e vou tentar adaptar o código com essa função enumerate, mais tarde te dou um retorno.
Abraço


6. Re: Como retornar o índice de um elemento em uma lista? [RESOLVIDO]

Raphael Henrique
RaphaelHAS

(usa Outra)

Enviado em 27/08/2016 - 19:40h

ctw6av escreveu:

Desculpe mais fiquei confuso com sua pergunta, veja se é isso, se eu digitar 2 2 2 2 2 você quer que retorne sempre a primeira posição que o dois foi encontrado (ou na posição real no caso todas)

tipo assim:
Digite um numero 2
Digite um numero 3
Digite um numero 10
Digite um numero 49
Digite um numero 2

número: 2 na 1° posição da lista
número: 3 na 2° posição da lista
número: 2 na 1° posição da lista


A parte alterada está entre "===="

Ficaria assim
# coding: utf-8

lista = [] # Cria uma lista vazia

primo = True # Cria uma variavel booleana inicializada com True

for i in range(5): # Preenche 5 elementos na lista
lista.append(int(input("Digite um numero ")))

for i in lista: # Percorre a lista
for j in range(2,
i): # Foi criado esse segundo for para que o valor de J seja usado na verificação de um elemento primo
if ((i % j) == 0): # Se um elemento for divisível por algum valor de J, ele não é primo
primo = False
break

if (primo): # Se o numero eh primo, entra na condição
# ==============================================================================================================#
pos = lista.index(i)
print('número: %i na %i° posição da lista' % (i, pos + 1)) # Printa o número e sua primeira aparição na lista
# ==============================================================================================================#

primo = True # Volta o valor de Primo pra True, para a proxima iteração




----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


Na verdade eu não quero a primeira posição em que um número primo X apareça, eu quero exatamente a posição que um número primo X aparecer, sendo o primeiro ou não. Utilizei o ".index(X)" para tentar fazer o programa funcionar, porém foi falha, visto que se eu possuir números primos repetidos o programa não retorna as posições corretas.



7. Re: Como retornar o índice de um elemento em uma lista?

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 27/08/2016 - 19:57h

RaphaelHAS escreveu:

Lisandro escreveu:

Então, parece que temos uns problemas aí!
Quando fazemos range(2,i) estamos dizendo para gerar números no range com início em 2 e final em "i", então se eu entrar com os números 1,2,3,4,5 o que vai acontecer é que o if lá que teste i%j só vai começar a partir do 3 que é o primeiro maior que o 2 que foi de onde eu mandei começar o range e o 5 vai ser testado mas não vai aparecer impresso como se ele não fosse primo.
De 1 a 5 os números primos são 2,3,5 mas só o 3 vai aparecer !!!
Quanto ao índice. Precisa mesmo dele? Em C é importante mas em Python só é preciso em casos específicos.
Mas se precisar pode usar o enumerate. Exemplo:

h = ['adeus', 'c++', 'ola', 'python']
for i, word in enumerate(h):
print (i, word)

Resultado:

0 adeus
1 c++
2 ola
3 python

Como pode ver 'i' fica com o indice e 'word' fica com o elemento da lista.

Abraço


Lisandro, obrigado pela dica e vou tentar adaptar o código com essa função enumerate, mais tarde te dou um retorno.
Abraço


Vai ai um código funcionando pra ter como base:

lista = [] #Cria uma lista vazia

primo = " é primo e seu índice é " #Cria variaveis com mensagens
composto = " é composto e seu índice é "

for i in range(5): #Preenche 5 elementos na lista
lista.append(int(input("Digite um numero ")))

for indice, num in enumerate(lista): #Percorre a lista com enumerate
if num == 2: # se for 2 sei que é primo
print (str(num) + primo + str(indice))
elif num == 1 or num % 2 == 0: # se for 1 ou tiver resto da divisão por 2 sei que não é
print(str(num) + composto + str(indice))
else: # para os demais casos testo
x = 3
for x in range(3, num + 1):
if num % x == 0:
if num != x:
print(str(num) + composto + str(indice))
else:
print (str(num) + primo + str(indice))



8. Re: Como retornar o índice de um elemento em uma lista? [RESOLVIDO]

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 27/08/2016 - 20:10h

ctw6av escreveu:

Entendi...

lista = []  # Cria uma lista vazia

for i in range(5): # Preenche 5 elementos na lista
lista.append(int(input("Digite um numero: ")))


def check_primo(num):
for x in range(2, num):
if num % x != 0:
return True
else:
return False

for i in range(len(lista)):
if check_primo(lista[i]):
print('Número: {}\t{}'.format(lista[i], i))


output:
Digite um numero: 17
Digite um numero: 19
Digite um numero: 11
Digite um numero: 12
Digite um numero: 14

Número: 17 0
Número: 19 1
Número: 11 2



----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


Muito bom ctw6av! Gostei da tua solução.
Conta aí. Programava em C antes né? ;-D
Abraço


9. Re: Como retornar o índice de um elemento em uma lista?

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 27/08/2016 - 20:14h

Sou analfabeto em C , Mas quando eu aprender Python vou resolver esse problema.

Obrigado \°/


----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


10. Exatamente isso!

Raphael Henrique
RaphaelHAS

(usa Outra)

Enviado em 29/08/2016 - 18:09h

ctw6av escreveu:

Entendi...

lista = []  # Cria uma lista vazia

for i in range(5): # Preenche 5 elementos na lista
lista.append(int(input("Digite um numero: ")))


def check_primo(num):
for x in range(2, num):
if num % x != 0:
return True
else:
return False

for i in range(len(lista)):
if check_primo(lista[i]):
print('Número: {}\t{}'.format(lista[i], i))


output:
Digite um numero: 17
Digite um numero: 19
Digite um numero: 11
Digite um numero: 12
Digite um numero: 14

Número: 17 0
Número: 19 1
Número: 11 2



----------------------------------------------------------
A Internet... foi projetada no espírito da confiança. Nem os protocolos de rede
de comunicações nem o software que comanda os sistemas computacionais
conectados a rede foram arquitetados para operação num ambiente no qual estão sob
ataque.
----------------------------------------------------------


Era exatamente isso o que eu estava procurando, muito obrigado!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts