# Problema con funzione di controllo accetabilità soluzione in cabala Https://training.olinfo.it/#/task/ois\_cabala/statement

**URL:** <https://forum.olinfo.it/t/problema-con-funzione-di-controllo-accetabilita-soluzione-in-cabala-https-training-olinfo-it-task-ois-cabala-statement/8342>\
**Category:** Algoritmi\
**Created:** [22 Giugno 2023, 6:14pm UTC](https://forum.olinfo.it/t/problema-con-funzione-di-controllo-accetabilita-soluzione-in-cabala-https-training-olinfo-it-task-ois-cabala-statement/8342 "2023-06-22T18:14:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mario\_Rossi1234](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/838e76/32.png) [@Mario\_Rossi1234](https://forum.olinfo.it/u/Mario_Rossi1234)\
**Post date:** [22 Giugno 2023, 6:14pm UTC](https://forum.olinfo.it/t/problema-con-funzione-di-controllo-accetabilita-soluzione-in-cabala-https-training-olinfo-it-task-ois-cabala-statement/8342/1 "2023-06-22T18:14:04Z")

</div>

Sto risolvendo cabala ma ho un piccolo problemino con il controllo del numero per vedere se questo ha 2 cifre uguali consecutive. Il codice che ho scritto in python per il controllo è questo:

```auto
def controllino(l):
	new_list = []
	for element in l:
		if element not in new_list:
			new_list += [element]
	l = new_list

	for element in l:
		for i in range(len(element)-1):
			if element[i] == element[i+1]:
				l.remove(element)
				print(element)
				break			
	return l

```

Questa funzione nella prima parte (rimuovere eventuali duplicati) riesce, nella seconda parte (rimuovere numeri con cifre consecutive uguali) riesce solo in parte non rimuovendo tutte le occorenze. Grazie per chi cercherà di aiutare 🙂

---

<div class="post-metadata">

**Author:** ![fabriziogiacomi](https://forum.olinfo.it/user_avatar/forum.olinfo.it/fabriziogiacomi/32/2523_2.png) [@fabriziogiacomi](https://forum.olinfo.it/u/fabriziogiacomi)\
**Post date:** [23 Giugno 2023, 9:33am UTC](https://forum.olinfo.it/t/problema-con-funzione-di-controllo-accetabilita-soluzione-in-cabala-https-training-olinfo-it-task-ois-cabala-statement/8342/2 "2023-06-23T09:33:59Z")

</div>

Ciao, potresti fornire un valore di esempio per la variabile `l`? In questo modo è più semplice capire cosa non funziona nel codice da te fornito.

---

<div class="post-metadata">

**Author:** ![Mario\_Rossi1234](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/838e76/32.png) [@Mario\_Rossi1234](https://forum.olinfo.it/u/Mario_Rossi1234)\
**Post date:** [23 Giugno 2023, 5:32pm UTC](https://forum.olinfo.it/t/problema-con-funzione-di-controllo-accetabilita-soluzione-in-cabala-https-training-olinfo-it-task-ois-cabala-statement/8342/3 "2023-06-23T17:32:03Z")

</div>

Ho risolto e alla fine il problema era questo ciclo:

> [@Mario\_Rossi1234](#):
>
> ```auto
> for element in l:
> for i in range(len(element)-1):
> if element[i] == element[i+1]:
> l.remove(element)
> print(element)
> break	
> 
> ```

Poiché rimuovevo elementi dalla lista sulla quale ciclavo, mandando in vacca tutto. Alla fine mi è bastato fare così per risolvere:

```auto
	n = new_list
	l = n.copy()
	for element in l:
		for i in range(len(element)-1):
			if element[i] == element[i+1]:
				n.remove(element)
				break			

```

Ciclando sulla lista “copia” ed eliminando dalla lista “n” che poi ritorna

---

<div class="post-metadata">

**Author:** ![fabriziogiacomi](https://forum.olinfo.it/user_avatar/forum.olinfo.it/fabriziogiacomi/32/2523_2.png) [@fabriziogiacomi](https://forum.olinfo.it/u/fabriziogiacomi)\
**Post date:** [25 Giugno 2023, 5:26pm UTC](https://forum.olinfo.it/t/problema-con-funzione-di-controllo-accetabilita-soluzione-in-cabala-https-training-olinfo-it-task-ois-cabala-statement/8342/4 "2023-06-25T17:26:22Z")

</div>

Immaginavo fosse un problema del genere… Sono contento che tu sia riuscito a risolvere! Una piccola ottimizzazione potrebbe essere quella di usare un `set` per eliminare elementi duplicati. Puoi trovare maggiori informazioni sui set [qui](https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset).

Lascio in fondo al messaggio un’implementazione che fa uso dei set.

Buona fortuna nell’implementazione!

> **Implementazione della funzione usando i set**
>
> ```python
> def controllino(
> l: list[object] # L contiene elementi di qualsiasi tipo (interi, stringhe, ...)
> ) -> list[str]: # Viene restituita una lista di stringhe
> n: set[str] = set(map(str, l)) # Convertiamo L in un set, rimuovendo i duplicati
> result: list[str] = list(n) # Copiamo N in una lista
>     
> # La tua logica rimane invariata
> for element in n:
> for i in range(len(element) - 1):
> if element[i] == element[i + 1]:
> result.remove(element)
> break
>     
> return result
> 
> ```
> 
> Ovviamente potrebbe essere migliorata ulteriormente 😉
> 
> P.S. ho usato type hints in modo da chiarire meglio il perché di alcune azioni, volendo puoi tranquillamente ometterle:
> 
> ```python
> def controllino(l):
> n = set(map(str, l))
> l = list(n)
>     
> for element in n:
> for i in range(len(element) - 1):
> if element[i] == element[i + 1]:
> l.remove(element)
> break
>     
> return l
> 
> ```
