[pyar] ¿Volvemos a empezar?

Fernando Pelliccioni fpelliccioni en gmail.com
Mie Abr 30 19:02:08 ART 2014


2014-04-30 18:14 GMT-03:00 Marcelo Fernandez <
marcelo.fidel.fernandez en gmail.com>:

> El 30 de abril de 2014, 17:39, Fernando Pelliccioni
> <fpelliccioni en gmail.com> escribió:
> >
> >
> >
> > 2014-04-30 17:03 GMT-03:00 fisa <fisadev en gmail.com>:
> >
> >> El día 30 de abril de 2014, 17:02, fisa <fisadev en gmail.com> escribió:
> >> > El día 30 de abril de 2014, 16:59, Emiliano Dalla Verde Marcozzi
> >> > <edvm en fedoraproject.org> escribió:
> >> >> El 30 de abril de 2014, 16:48, Fernando Pelliccioni
> >> >> <fpelliccioni en gmail.com>
> >> >> escribió:
> >> >>>
> >> >>> Tiro una que puede parecer una boludés...
> >> >>>    - Determinar si una secuencia de elementos es un palíndromo.
> >> >>> Parece un ejercicio de introducción a la programación, ... , pero...
> >> >>> si
> >> >>> les va, la hacemos (sin medir tiempos, no hace falta) y después
> vemos
> >> >>> la
> >> >>> utilidad.
> >> >>
> >> >>
> >> >> Mi implementación de palindromo a la python por acá! :)
> >> >>>>> cadena = 'asdsa'
> >> >>>>> [c for c in cadena][::-1] == [c for c in cadena]
> >> >> True
> >> >>
> >> >
> >> > +1 a lo que dijo facu, pero no puedo dejar pasar este detalle: no hace
> >> > falta una list comprehension para eso! y lo va a hacer más lento al
> >> > pedo :)
> >> > Basta con:
> >> >     cadena::-1 == cadena
> >> >
> >>
> >> Typo! era:
> >>      cadena[::-1] == cadena
> >>
> >>
> >
> > Que significa el [::-1] ?
>
> El tercer valor de un slice es el step, y -1 quiere decir que se lo
> recorra al revés, digamos.
>
> "The slice of s from i to j with step k is defined as the sequence of
> items with index x = i + n*k such that 0 <= n < (j-i)/k. In other
> words, the indices are i, i+k, i+2*k, i+3*k and so on, stopping when j
> is reached (but never including j). If i or j is greater than len(s),
> use len(s). If i or j are omitted or None, they become “end” values
> (which end depends on the sign of k). Note, k cannot be zero. If k is
> None, it is treated like 1."
>
> https://docs.python.org/3/library/stdtypes.html#common-sequence-operations
>
> >>> foo = '0123456789'
> >>> foo[::-1]
> '9876543210'
>
> Saludos
>

Gracias muchachos por la explicación de slice.

Leyendo la documentación, no me queda claro si el slice implica "recrear"
el fragmento de la secuencia en otro pedazo de memoria o solo es una forma
de iterar la secuencia original.

¿Existe en Python alguna forma de verificar si algun elemento esta siendo
copiado?
Lo pregunto, para poder verificar mi duda.

Les escribo un ejemplo en C++ (ya que hay gente que sabe) para ilustrar lo
que estoy preguntado.
En C++ podría crear una clase, llamemosla Instrumentation, para verificar
el comportamiento de los algoritmos...

// Pseudo-C++, no es del todo correcto, solo quiero expresar la idea.
class Instrumentation {
Instrumentation( Instrumentation const& x ) // este es el Copy-Constructor,
se ejecuta cada vez que quiero copiar un objeto...
{
cout << "Se esta copiando un objeto del tipo Instrumentation\n"; // escribe
en standard output
}
};

// entonces, suponganmos que tengo una sequencia de elementos
vector<Instrumentation> v = { /* llenar con elementos */ }; // vector es un
array redimensionable, elementos contiguos en memoria.

// supongamos algo analogo al Slice de Python, la funcion slice(s, i, j, k)
(no se todavia que deberia retornar)
auto s = slice(v, ?, ?, -1);

Si la funcion slice hace una copia de los elementos de mi secuencia...
deberia ver en la salida estandar el string que puse en el Copy-Ctor.
Si la funcion slice me retorna un Iterador (una forma de recorrer la
secuencia), entonces, no hay copia.

No se si me expliqué bien o estoy mareando al pedo (a veces me pasa).

Saludos.
Fernando.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140430/7801518d/attachment.html>


More information about the pyar mailing list