Existe uma maneira de substring uma string em Python, para obter uma nova string do terceiro caractere até o final da string?
Talvez como myString[2:end]
?
Se sair da segunda parte significa 'até o fim', e se você deixar a primeira parte, ela começa do início?
Respostas:
Python chama esse conceito de "fatia" e funciona em mais do que apenas strings. Dê uma olhada aqui para uma introdução abrangente.
fonte
Apenas por completude, como ninguém mais o mencionou. O terceiro parâmetro para uma fatia da matriz é uma etapa. Portanto, reverter uma string é tão simples quanto:
Ou selecionar caracteres alternativos seria:
A capacidade de avançar e retroceder na cadeia de caracteres mantém a consistência de poder organizar a fatia desde o início ou o fim.
fonte
Substr () normalmente (por exemplo, PHP e Perl) funciona desta maneira:
Então os parâmetros são
beginning
eLENGTH
.Mas o comportamento do Python é diferente; espera início e um após END (!). Isso é difícil de identificar pelos iniciantes. Portanto, a substituição correta para Substr (s, começando, COMPRIMENTO) é
fonte
s[beginning:][:length]
Uma maneira comum de conseguir isso é cortando as cordas.
MyString[a:b]
fornece uma substring do índice a a (b - 1).fonte
Um exemplo parece estar faltando aqui: cópia completa (rasa).
Este é um idioma comum para a criação de uma cópia dos tipos de sequência (não das seqüências internas)
[:]
,. Raso copia uma lista, consulte Sintaxe de fatia de lista do Python usada sem motivo óbvio .fonte
a=b
deve ser suficiente.[:]
em um tipo imutável não faz uma cópia. Enquantomysequence[:]
é principalmente inofensivo quandomysequence
é um tipo imutável comostr
,tuple
,bytes
(PY3) ouunicode
(Py2),a = b[:]
é equivalente aa = b
, ele só perde um pouco de tempo despachando os códigos de byte de corte que o objeto responde a retornando em si, uma vez que é inútil cópia superficial quando , além dos testes de identidade do objeto, é equivalente a apenas retornar outra referência ao próprio eu imutável.s[:]
não fazer uma cópia de todo:s = 'abc'; s0 = s[:]; assert s is s0
. Sim, era a maneira idiomática de copiar uma lista em Python até que as listas chegassemlist.copy
, mas uma fatia completa de um tipo imutável não tem motivos para fazer uma cópia, porque ela não pode ser alterada; portanto, pode haver apenas uma na memória e não devemos perder tempo copiando-o. Como esta resposta está errada e nem sequer responde à pergunta - ela deve ser excluída?Sim, isso realmente funciona se você atribuir ou vincular o nome
end
ao singleton constanteNone
:A notação de fatia possui 3 argumentos importantes:
Os padrões deles quando não fornecidos são
None
- mas podemos ignorá-los explicitamente:Sim, por exemplo:
Observe que incluímos start na fatia, mas apenas subimos e não incluímos a parada.
Quando a etapa é
None
, por padrão, a fatia usa1
para a etapa. Se você pisar com um número inteiro negativo, o Python é inteligente o suficiente para ir do fim ao começo.Explico detalhadamente a notação de fatia na minha resposta à pergunta Explain notation slice.
fonte
Você conseguiu isso lá, exceto por "end". É chamado de notação de fatia. Seu exemplo deve ser:
Se você deixar de fora o segundo parâmetro, é implicitamente o fim da string.
fonte
Eu gostaria de acrescentar dois pontos à discussão:
Você pode usar
None
um espaço vazio para especificar "desde o início" ou "até o fim":Isso é particularmente útil em funções, nas quais você não pode fornecer um espaço vazio como argumento:
Python possui objetos de fatia :
fonte
Se myString contiver um número de conta que comece no deslocamento 6 e tenha o comprimento 9, você poderá extrair o número da conta da seguinte maneira:
acct = myString[6:][:9]
.Se o OP aceitar isso, eles podem tentar, de maneira experimental,
Funciona - nenhum erro é gerado e não ocorre o 'preenchimento de string' padrão.
fonte
myString[offset:][:length]
no caso do OP você pode apenas usarmyString[offset:][:]
Talvez eu tenha perdido, mas não consegui encontrar uma resposta completa nesta página para a (s) pergunta (s) original (ais) porque as variáveis não são discutidas mais aqui. Então eu tive que continuar pesquisando.
Como ainda não tenho permissão para comentar, deixe-me adicionar minha conclusão aqui. Tenho certeza de que não fui o único interessado ao acessar esta página:
Se você deixar a primeira parte, receberá
E se você deixou o: no meio, também obteve a substring mais simples, que seria o quinto caractere (contagem começando com 0, então fica em branco nesse caso):
fonte
Bem, eu tive uma situação em que precisava traduzir um script PHP para Python, e ele teve muitos usos
substr(string, beginning, LENGTH)
.Se eu escolhesse o Python,
string[beginning:end]
teria que calcular muitos índices finais, portanto, a maneira mais fácil de usarstring[beginning:][:length]
, isso me salvou de muitos problemas.fonte
Usar os próprios índices codificados pode ser uma bagunça.
Para evitar isso, o Python oferece um objeto interno
slice()
.Se queremos saber quanto dinheiro me resta.
Solução normal:
Usando fatias:
Usando fatia você ganha legibilidade.
fonte