Como posso obter a posição de um personagem dentro de uma string em python?
527
Existem dois métodos de string para isso, find()
e index()
. A diferença entre os dois é o que acontece quando a sequência de pesquisa não é encontrada. find()
retorna -1
e index()
aumenta ValueError
.
find()
>>> myString = 'Position of a character'
>>> myString.find('s')
2
>>> myString.find('x')
-1
index()
>>> myString = 'Position of a character'
>>> myString.index('s')
2
>>> myString.index('x')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
string.find(s, sub[, start[, end]])
Retornar o menor índice de s onde a subcadeia sub se encontra de tal modo que sub está totalmente contido nas[start:end]
. Retorno-1
em caso de falha. Os padrões para início e fim e a interpretação dos valores negativos são os mesmos para as fatias.
E:
string.index(s, sub[, start[, end]])
Gostar,find()
mas aumentarValueError
quando a substring não for encontrada.
Por uma questão de integridade, se você precisar encontrar todas as posições de um personagem em uma sequência, faça o seguinte:
s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]
que retornará [4, 9]
print( [pos for pos, char in enumerate(s) if char == c])
foo = ( [pos for pos, char in enumerate(s) if char == c])
colocará as coordenadas foo em um formato de lista. Acho isso realmente útilManeira "muito enrolada"
para obter substring,
fonte
str[from:to]
ondefrom
eto
são índicesApenas para conclusão, no caso de eu querer encontrar a extensão em um nome de arquivo, para verificar isso, preciso encontrar o último '.', Nesse caso, use rfind:
no meu caso, uso o seguinte, que funciona independentemente do nome completo do arquivo:
fonte
left = q.find("{"); right = q.rfind("}")
.O que acontece quando a string contém um caractere duplicado? da minha experiência com
index()
vi que, por duplicado, você recebe de volta o mesmo índice.Por exemplo:
retornaria:
Nesse caso, você pode fazer algo assim:
fonte
enumerate
é melhor para esse tipo de coisa.Talvez você queira dar uma olhada na documentação para descobrir qual é a diferença entre os dois.
fonte
Um caractere pode aparecer várias vezes em uma sequência. Por exemplo, em uma sequência
sentence
, a posição dee
é1, 4, 7
(porque a indexação geralmente começa do zero). mas o que eu acho são as duas funçõesfind()
eindex()
retorna a primeira posição de um personagem. Portanto, isso pode ser resolvido fazendo o seguinte:fonte
more_itertools.locate
é uma ferramenta de terceiros que encontra todas as indicações de itens que atendem a uma condição.Aqui encontramos todos os locais de indexação da carta
"i"
.fonte
Uma solução com numpy para acesso rápido a todos os índices:
fonte