Re: [Python] Iterare in una lista.

2020-02-17 Per discussione Lorenzo Buonanno
Ritiro tutto: per liste grosse il costo di calcolare (in python) a ogni
iterazione `(i + base) % len` è molto maggiore del costo di creare una sola
volta all'inizio la nuova lista:

In python3.8:
>>> import timeit
>>> setup = """def function1(lista, base):
... s = 0
... for e in lista[base:]+lista[:base]:
... s += e
... return s
...
... def function2(lista, base):
... s = 0
... l = len(lista)
... for i in range(l):
... s += lista[(i + base) % l]
... return s
...
... lista = list(range(10**6))
... base = 424_242
... """

>>> timeit.timeit("function1(lista, base)", setup=setup, number=500)
33.3623988628


>>> timeit.timeit("function2(lista, base)", setup=setup, number=500)
66.6768571770001


In pypy3 7.3.0

 timeit.timeit("function1(lista, base)", setup=setup, number=500)
3.72352198076
 timeit.timeit("function2(lista, base)", setup=setup, number=500)
9.05015236352
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-16 Per discussione Lorenzo Buonanno
Se k<=n, O(n+k) <= O(2n) che è == O(n)

In particolare il tempo necessario a stampare tutti gli elementi con print
(o a farci qualsiasi cosa di non estremamente banale) sarà molto maggiore
del tempo necessario a creare la nuova lista.

Mi aspetterei anch'io che la soluzione di cm sia più efficiente per liste
molto grosse (e usi meno memoria). Ma nel 99% dei casi mi sa che la
stragrande maggioranza del tempo si passa dentro il for, e le differenze
misurate non siano davvero significative

On Mon, Feb 17, 2020, 08:45 Pietro Brunetti  wrote:

>
>> Le differenze non sono sostanziali, ma la prima è leggermente più
>> efficiente
>>
>
> Ciao a tutti,
> trovo l'approccio di cm formalmente corretto "iterate lungo una lista" e
> non "create una lista".
>
> Per cm O(n) per l'altra funzione O(n+k), perché non solo itera ma anche
> estende.
>
> Basta dare una occhiata a questo, poi
>
> https://wiki.python.org/moin/TimeComplexity
>
> Adesso, il timeit mi contraddice. C'è qualche ottimizzazione dietro? Ho
> ragionato male? Bisogna provare con liste più "enormi"? Non so.
>
> Ciauz
> Pietro
>
>> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-16 Per discussione Pietro Brunetti
>
>
> Le differenze non sono sostanziali, ma la prima è leggermente più
> efficiente
>

Ciao a tutti,
trovo l'approccio di cm formalmente corretto "iterate lungo una lista" e
non "create una lista".

Per cm O(n) per l'altra funzione O(n+k), perché non solo itera ma anche
estende.

Basta dare una occhiata a questo, poi

https://wiki.python.org/moin/TimeComplexity

Adesso, il timeit mi contraddice. C'è qualche ottimizzazione dietro? Ho
ragionato male? Bisogna provare con liste più "enormi"? Non so.

Ciauz
Pietro

>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-16 Per discussione
Ciao DanZa

Il giorno dom 16 feb 2020 alle ore 19:27 Daniele Zambelli
 ha scritto:
>
> Ho confrontato le due funzioni:
>
> numel = 12
> lista = [i * 11 for i in range(numel)]
> base = 5
>
> def function1(lista, base):
> for e in lista[base:]+lista[:base]:
> print(e)
>
> def function2(lista, base):
> for i in range(len(lista)):
> print(lista[(i + base) % len(lista)])
>
> function1(lista, base)
> function2(lista, base)
>
> Qualcuno di esperti saprebbe indicare le caratteristiche dei due
> approcci in termini di risorse e di tempi?

Le differenze non sono sostanziali, ma la prima è leggermente più efficiente

```
>>> def print(*args): ...
>>> timeit function1(lista, base)
1.57 µs ± 27.3 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)
>>> timeit function2(lista, base)
2.48 µs ± 37.7 ns per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> timeit function1(lista, base)
1.55 µs ± 8.63 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)
>>> timeit function2(lista, base)
2.45 µs ± 12 ns per loop (mean ± std. dev. of 7 runs, 10 loops each)
```

㎝

-- 
 THE -WARE LICENSE (Revision ㊷):
<㎝.> wrote this . As long as you retain this notice you can
do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a  in return. — ㎝
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-16 Per discussione alessandro medici
Di passaggio: se non l'hai capita era perché evidentemente sono stato poco
chiaro nei commenti.
In effetti quella classe fa parecchie cose anche complicate.

Per lumi sono sempre disponibile, meglio se in privato così non si da
fastidio a nessuno.

E, magari, se mi fai delle domande, posso migliorarne la documentazione.

Bye!

Ale
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-16 Per discussione Daniele Zambelli
Il giorno dom 16 feb 2020 alle ore 20:05 alessandro medici
 ha scritto:
> [...]
> L'uso è piuttosto semplice, supponendo tu abbia una lista:
>
> lista = [0,1,2,3,4,5,6,7,8,9]
> lista = Repslicing(lista)
>
> a questo punto puoi iterare la nuova lista anche con gli indici necessari a 
> te:
>
> lista = lista[5:5]
> [...]

Non capisco il senso del secondo numero dello slicing.

Ciao

-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-16 Per discussione alessandro medici
Il dom 16 feb 2020, 19:27 Daniele Zambelli  ha
scritto:

> Il giorno sab 15 feb 2020 alle ore 20:04 alessandro medici
>  ha scritto:
> >
> >
> > Oggi è sabato. La cosa mi ha divertito ed ho pensato che valesse la pena
> generalizzare il problema:
> >
> >
> https://github.com/AlessandroMedici/add_a_mood_for_slice/blob/master/RepSlip.py
>
> Interessante... ma non l'ho capita
>



> :)


> Il giorno gio 13 feb 2020 alle ore 16:23 Gabriele Battaglia <
iz4...@libero.it> ha scritto:
> Buona sera.
> Se ho una lista che contiene 10 elementi e voglio scrivere un ciclo che
> itera dall'elemento 5, arriva alla fine e riprende finendo al 4.
> A parte gestire autonomamente l'indice con un algoritmo, esiste una
> funzione già presente in Python per farlo?
> Gabry

No, in effetti. La cosa però mi aveva incuriosito abbastanza perché l'idea
mi potrebbe esser utile,
se più generalizzata. Non solo alle liste, quindi.
L'uso è piuttosto semplice, supponendo tu abbia una lista:

lista = [0,1,2,3,4,5,6,7,8,9]
lista = Repslicing(lista)

a questo punto puoi iterare la nuova lista anche con gli indici necessari a
te:

lista = lista[5:5]
in lista troverai:
lista
[5,6,7,8,9,0,1,2,3,4]

p.s. stamane ho sistemato anche un paio di bug e spero anche di aver
corretto l'inglese da sabato sera :)))
p.p.s. la parte relativa agli indici negativi ed a step puo' essere
bellamente ignorata.

Ale.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-16 Per discussione Daniele Zambelli
Il giorno sab 15 feb 2020 alle ore 20:04 alessandro medici
 ha scritto:
>
>
> Oggi è sabato. La cosa mi ha divertito ed ho pensato che valesse la pena 
> generalizzare il problema:
>
> https://github.com/AlessandroMedici/add_a_mood_for_slice/blob/master/RepSlip.py

Interessante... ma non l'ho capita

Ho confrontato le due funzioni:

numel = 12
lista = [i * 11 for i in range(numel)]
base = 5

def function1(lista, base):
for e in lista[base:]+lista[:base]:
print(e)

def function2(lista, base):
for i in range(len(lista)):
print(lista[(i + base) % len(lista)])

function1(lista, base)
function2(lista, base)

Qualcuno di esperti saprebbe indicare le caratteristiche dei due
approcci in termini di risorse e di tempi?

Ciao.

-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-15 Per discussione alessandro medici
Oggi è sabato. La cosa mi ha divertito ed ho pensato che valesse la pena
generalizzare il problema:

https://github.com/AlessandroMedici/add_a_mood_for_slice/blob/master/RepSlip.py
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-14 Per discussione Daniele Zambelli
Il giorno gio 13 feb 2020 alle ore 16:23 Gabriele Battaglia
 ha scritto:
>
> Buona sera.
> Se ho una lista che contiene 10 elementi e voglio scrivere un ciclo che
> itera dall'elemento 5, arriva alla fine e riprende finendo al 4.
> A parte gestire autonomamente l'indice con un algoritmo, esiste una
> funzione già presente in Python per farlo?

Un'altra possibilità:

numel = 12
lista = [i * 11 for i in range(numel)]
base = 5
for e in lista[base:]+lista[:base]:
print(e)


-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Iterare in una lista.

2020-02-13 Per discussione Carlo Miron
Il giorno gio 13 feb 2020 alle ore 16:23 Gabriele Battaglia
 ha scritto:
>
> Buona sera.
> Se ho una lista che contiene 10 elementi e voglio scrivere un ciclo che
> itera dall'elemento 5, arriva alla fine e riprende finendo al 4.
> A parte gestire autonomamente l'indice con un algoritmo, esiste una
> funzione già presente in Python per farlo?
> Gabry

Nulla di già presente, ma puoi fare qualcosa tipo
```

>>> l = [i * 11 for i in range(10)]
>>> l
[0, 11, 22, 33, 44, 55, 66, 77, 88, 99]
>>> for i in range(len(l)):
... print(l[(i + 5) % len(l)])
...
55
66
77
88
99
0
11
22
33
44
```

Ciao,
㎝

-- 
 THE -WARE LICENSE (Revision ㊷):
 wrote this . As long as you retain this notice you can
do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a  in return. — Carlo
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Iterare in una lista.

2020-02-13 Per discussione Gabriele Battaglia

Buona sera.
Se ho una lista che contiene 10 elementi e voglio scrivere un ciclo che 
itera dall'elemento 5, arriva alla fine e riprende finendo al 4.
A parte gestire autonomamente l'indice con un algoritmo, esiste una 
funzione già presente in Python per farlo?

Gabry
--
Gabriele Battaglia, IZ4APU (Libero)
Sent from TB on Windows 10, Genus Bononiae's computer.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python