Pergunta

Eu estava procurando por uma forma de imprimir uma corda para trás, e depois de uma rápida pesquisa no google, eu encontrei este método:

a Suponha que é uma variável de cadeia. Isso irá retornar a string a para trás:

a[::-1]

Alguém pode explicar como isso funciona?

Foi útil?

Solução

Claro, o [::] é a estendida operador de fatia . Ele permite que você tire substrings. Basicamente, ele funciona, especificando quais os elementos que você quer como [começar: fim: passo], e ele funciona para todas as sequências. Duas coisas legais sobre ele:

  • Você pode omitir um ou mais dos elementos e ele faz "a coisa certa"
  • Os números negativos para início, fim e passo têm significado

Para começar e terminar, se você der um número negativo, isso significa a contar a partir do fim da sequência. Por exemplo, se eu tenho uma lista:

l = [1,2,3]

Então l[-1] é 3, l[-2] é 2, e l[-3] é 1.

Para o argumento step, um meio número negativo para o trabalho para trás através da sequência. Assim, para uma lista ::

l = [1,2,3,4,5,6,7,8,9,10]

Você poderia escrever l[::-1] o que significa, basicamente, para usar um tamanho de passo de -1, enquanto a leitura através da lista. Python irá "fazer a coisa certa" ao preencher a iniciar e parar assim que itera através da lista para trás e dá-lhe [10,9,8,7,6,5,4,3,2,1].

Eu dei os exemplos com listas, mas cordas são apenas uma outra sequência e funcionam da mesma maneira. Assim meios a[::-1] para construir uma corda, unindo os caracteres que você começa a andar para trás através do string.

Outras dicas

O "-1" parte representa a parte do "passo" da operação de corte, neste caso, que atravessa a cadeia de caracteres 1 de cada vez, mas para trás (um meio passo negativos começar a partir do fim da cadeia). Se você especificar o passo para ser 2, por exemplo, você deseja obter todos os outros caracteres da string, começando com o primeiro. Se você especificar um passo de -2, então você deseja obter qualquer outro caractere da string, começando com o último caractere e para trás trabalhar.

Assim, em poucas palavras, se a = '12345':

  • a[::2] se torna 135
  • a[::-1] se torna 54321
  • a[::-2] se torna 531

Eu acho o seguinte faz um pouco mais de sentido para seqüências de impressão na ordem inversa, mas talvez isso é só comigo:

for char in reversed( myString ):  
  print( char, end = "" )

É a estendida notação fatia :

sequence[start:end:step]

Neste caso, o passo -1 significa para trás, e omitindo os meios de início e fim que você quer toda a string.

É chamado Slice Notation em Python e você pode ler um pouco mais de como ele funciona aqui:

Explique fatia do Python notação

É usando corte prolongado - uma string é uma seqüência em Python, e compartilha alguns métodos com outras seqüências (ou seja, listas e tuplas). Há três partes para cortar - iniciar, parar e passo. Todos eles têm valores padrão - iniciar o padrão é 0, o padrão stop para len (seqüência), e defaults passo para 1. Ao especificar [:: - 1] você está dizendo "todos os elementos na sequência de um, a partir do início , até o final indo um para trás de uma vez.

Este recurso foi introduzido em Python 2.3.5, e você pode ler mais no O que há de novo docs .

[:: - 1] dá uma fatia da string a. a sintaxe completa é a[begin:end:step] o que dá uma [begin], a [começam + passo], ... um [end-1]. Quando passo é negativo, você começa no final e passar para começar.

Finalmente, começam padrões para o início da sequência, a extremidade a extremidade, e passo a -1.

Eu faria isso como este:

variable = "string"
message = ""
for b in variable:
    message = b+message
print (message)

e imprime: gnirts

Uma cadeia é essencialmente uma sequência de caracteres e assim a operação de corte trabalha nele. O que você está fazendo é de fato:

-> obter uma fatia de 'a' do início ao fim em passos de 1 para trás

.

É notação básica etapa, considere a funcionalidade:

a [2: 4: 2]

O que acontece é que o índice é cortado entre a posição 2 e 4, que a terceira variável faz é que define o tamanho do passo a partir do primeiro valor. Neste caso, seria um regresso [2], uma vez que uma [4] é um limites superiores apenas dois valores são retorno e não segundo passo tem lugar. O (-). Operador de subtração simplesmente inverte a saída passo

Considere a lista abaixo

l=[12,23,345,456,67,7,945,467]

Outro truque para reverter uma lista podem ser:

l[len(l):-len(l)-1:-1] [467, 945, 7, 67, 456, 345, 23, 12]

l[:-len(l)-1:-1] [467, 945, 7, 67, 456, 345, 23, 12]

l[len(l)::-1] [467, 945, 7, 67, 456, 345, 23, 12]

podemos usar append e pop para fazê-lo

def rev(s):
    i = list(s)
    o = list()
    while len(i) > 0:
        o.append(t.pop())

    return ''.join(o)

Sem usar revertida ou [:: - 1], aqui está uma versão simples baseado em recursão eu considero ser o mais legível:

def reverse(s):

  if len(s)==2:
    return s[-1] + s[0]

  if len(s)==1:
    return s[0]

  return s[-1] + reverse(s[1:len(s)-1]) + s[0]

Usando fatia estendido sintaxe

word = input ("Type a word which you want to reverse: ")
def reverse(word):
  word = word[::-1]
  return word
print (reverse(word))

Você pode usar invertida () função. Por exemplo

x = "abcd"
for i in reversed(x):
        print(i, end="")
print("\n")
L = [1,2,3]
for i in reversed(L):
        print(i, end="")

impressões dcba e 321

o primeiro dois limites padrão para 0 eo comprimento da seqüência, como antes, e um passo de -1 indica que a fatia deve ir da direita para a esquerda em vez de à esquerda de costume para a direita. O efeito, portanto, é de inverter a sequência.

name="ravi"
print(name[::-1]) #ivar
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top