0
votes

Écrire S [:: - 1] Utiliser des indices explicites

Je ne peux pas écrire s [:: - 1] qui inverse la chaîne s à l'aide d'indices explicites. Je veux écrire s [A: B: -1] mais je ne sais pas quoi mettre pour a et b . Voici un échantillon de code, il devrait produire fedcba : xxx

de la documentation:

Les indices en tranches ont des valeurs par défaut utiles; un premier index omis par défaut à zéro , un second index omis par défaut par défaut à la taille de la chaîne étant tranché.


14 commentaires

S'il vous plaît expliquer comment devrait être la sortie?


Je ne comprends pas ce que vous demandez. Pourquoi "ne peut pas" écrire s [:: - 1] ? Vous peut l'écrire et il produit la sortie que vous souhaitez.


"Je ne sais pas quoi mettre pour A et B" - qu'avez-vous essayez de mettre et quel était le problème avec cela?


@ mkrieger1 Je peux - je veux juste comprendre comment je peux écrire cela en utilisant des indices explicites. C'est une question valable - je devrais pouvoir écrire ceci en utilisant s [A: B: -1] où a, b y a quelques expressions.


... Donc, c'est une question de curiosité, pas un problème pratique? Nos règles exigent que les problèmes soient pratiques - que leurs réponses changent comment vous allez sur la pratique de la programmation. (Voir meta.stackoverflow.com/questions/297058/... sur Overflow Meta Stack )


S [LEN (s): Aucune: -1] semble fonctionner


@CHARLES Vous pouvez concevoir une situation dans laquelle vous décidez de manière dynamique des valeurs pour a, b, c pour passer à s [A: B: C] ...


@Deceze, sûr; Un tel scénario est donné (avec une tentative spécifique à une implémentation de travail et un mode de défaillance spécifique rencontré), nous avons une question pratique. F / E, n'ayant pas un Pratique échec, nous ne pouvons pas dire si Aucun est une réponse adéquate dans le champ B ou si elle doit vraiment être 0 (ou une autre valeur entières non négative); Parce que la seule base sur laquelle une réponse peut être déterminée à être correcte est la "op d'emploi" le PO considère que leur curiosité est résolue? ".


Voici un autre qui n'a pas encore été répertorié: s [-1: -Len (s) -1: -1] , bien que s [Aucun: Aucun: -1] est probablement plus lisible.


Ne diriez-vous pas alors que la documentation Python est fausse? De toute évidence, les indices omis par défaut à Aucun . Si une expérience avec la tranchée s Il est clair que la valeur par défaut est Aucun si un index est omis.


Je pense que cela pourrait bouillir à cette question: Stackoverflow.com/questions/399067/... demande essentiellement "Pourquoi utiliser -1 comme stop ne fonctionne pas attendu". Ou ceci: Stackoverflow.com/Questtions/5798136/...


@ S5S, ... Je dirais que la documentation Python sur le comportement par défaut ne couvre pas le cas d'étape négative, oui. OTOH, le cas d'étape négative n'est pas se produit en présence de comportement purement par défaut. :)


@CharlesDuffy mais même avec une étape non négative, en utilisant Aucun à la place des indices omis produisent des résultats cohérents. Par exemple, s [aucun, aucun] ou s [aucun: 3] etc. Il apparaît, il est plus correct de suggérer que la valeur par défaut est Aucun < / code> si un index est omis. Je n'ai pas regardé la mise en œuvre, mais j'imagine que cela par défaut de Aucun .


Je ne serais pas surpris si la mise en œuvre reconnaît Aucun comme espace réservé et la remplaçait par quelque chose d'autre (tel qu'un indice non négatif avec une valeur numérique spécifique) plus tard.


4 Réponses :


0
votes

Je veux écrire S [A: B: -1] mais je ne sais pas quoi mettre pour A et B.

Voilà y aller: xxx


0 commentaires

-1
votes

Cela devrait le faire.

s[len(s)::-1]


2 commentaires

Cela fournit une valeur explicite dans l'espace réservé A , mais pas le B un; L'OP veut les deux.


Ce serait une meilleure réponse si vous avez expliqué comment le code que vous avez fourni des réponses à la question.



2
votes

Si vous voulez vraiment remplir tous les 3 placements, vous pouvez faire xxx pré>

édition: comme suggéré par @Deceze, cela fonctionne trop p>

s[None:None:-1]


5 commentaires

Aucune car le début ferait bien ...


Eh bien, c'est ce qui se passe lorsque vous l'avez laissé vide, il devient Aucun et Python le gère. Je pense donc que ce n'est toujours pas une réponse.


@ASOCIA Si la question est de trouver des valeurs pour a, b, c qui reproduira le comportement de s [:: - 1] avec S [A: B: C] , puis sur Aucun est une solution valide.


En outre, des indices omis par défaut à zéro ou à la taille de la chaîne, au moins comme indiqué dans la question.


@Decezeze alors pourquoi @Pani a répondu S [LEN (S): Aucun: -1] mais pas S [Aucun: Aucun: -1] ? Ils ont essayé de trouver a et len (s) était une valeur valide pour A , essayé de trouver b mais Impossible de trouver et de mettre aucun . Révélant l'évidence, Aucun , ne doit pas être considéré comme une réponse.



0
votes

Voici des valeurs pour A et B qui fonctionnent:

lst = list('abcd')

a = b = None
print (lst[a:b:-1]) # returns ['d', 'c', 'b', 'a']

a = len(lst)
b = 0 - len(lst) - 1 # b = -5

print (lst[a:b:-1]) # returns ['d', 'c', 'b', 'a']


0 commentaires