Topic: [risolto] Entry di ricerca  (Letto 371 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
[risolto] Entry di ricerca
« il: Giugno 21, 2020, 12:52 »
Buongiorno, in questi giorni stavo provando a crerae un'applicazione che tra le altre cose aveva anche una specie di motore di ricerca in una lista.
Il mio problema è che usando if elif else sarebbe troppo lungo come lavoro e visto che la mia lista potrebbe contenere qualche centinaia di elementi mi chiedevo se esistesse un altro modo.

      def cerca_canz(event):
        lista = ["heppier", "....."]
        for canz in lista:
          if canz == self.titolo_canz.get():
            if canz == "heppier":
              def heppier():
                print("attributi della canzone")
              heppier()

# qui avevo dichiarato tutte le variabili collegando anche l'Entry ad alcuni attributi bind

Con questo script ottengo effettivamente il risultato sperato però come dicevo prima mi chiedevo se esistesse un altro modo.
Mi scuso di aver usato nomi di variabili non in inglese.
Spero di essere stato abbastanza chiaro.
Grazie in anticipo per coloro che si renderanno disponibili
« Ultima modifica: Giugno 21, 2020, 23:59 da Gianpatrizio »

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 381
  • Punti reputazione: 0
    • Mostra profilo
Re:Entry di ricerca
« Risposta #1 il: Giugno 21, 2020, 16:05 »
Sei piuttosto "vago" nel definire le condizioni di contesto, da quanto esposto si desume si tratti di una lista di stringhe, in tal senso potrebbe esseTi utile il metodo ".index(item)" delle liste, che restituisce l'indice corrispondente all'item cercato, se presente nella lista, ovvero causa una eccezione "ValueError", si potrebbe sfruttare la faccenda, p.e., scrivendo una funzione che restituisca l'indice trovato o "-1", tipo :
>>> def get_element_index(lst, elem):
try:
ind = lst.index(elem)
except ValueError:
return -1
return ind


ed utilizzare una metodologia del genere per "agire" :
>>> var = ['Apelle', 'pluto', 'di']
>>> my_list = ['Apelle', 'figlio', 'di', 'Apollo']
>>> for item in var:
index = get_element_index(my_list, item)
if index >= 0:
print('{} trovato, indice : {}'.format(item, index))
else:
print('{} non compreso nella lista'.format(item))


Apelle trovato, indice : 0
pluto non compreso nella lista
di trovato, indice : 2
>>>


... ma è solo uno spunto esemplificativo, moltissimo dipende dalla struttura dati, dal contesto e dalla finalità

[Edit] dimenticavo, dando per scontato, che puoi benissimo utilizzare 'in' per verificare se un elemento è in lista. tipo :
>>> for item in var:
if item in my_list:
print('{} trovato, indice : {}'.format(item, get_element_index(my_list, item)))
else:
print('{} non compreso nella lista'.format(item))


Apelle trovato, indice : 0
pluto non compreso nella lista
di trovato, indice : 2
>>>
« Ultima modifica: Giugno 21, 2020, 16:15 da nuzzopippo »

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Re:Entry di ricerca
« Risposta #2 il: Giugno 21, 2020, 23:59 »
La ringazio per la velocità nella risposta e per il tempo dedicatomi, ho risolto razie mille

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 381
  • Punti reputazione: 0
    • Mostra profilo
Re:[risolto] Entry di ricerca
« Risposta #3 il: Giugno 22, 2020, 07:51 »
beh ... la risposta è stata sin troppo veloce, avevo ben poco tempo nel momento in cui l'ho fatta.

Son contento Tu abbia risolto, mi aspettavo un maggior dettaglio del problema, ma spero proprio NON sia stato sulla base della funzione esemplificativa dell'uso di index() che, seppur funzionante, è più adatta ad altri linguaggi e ben poco "pythonica", dato che in python l'operatore "in" la rende inutile, essendo sostituibile da una istruzione ternaria ... Te ne faccio esempio
>>> my_list = 'Apelle figlio di Apollo fece una palla di pelle di pollo'.split()
>>> my_list
['Apelle', 'figlio', 'di', 'Apollo', 'fece', 'una', 'palla', 'di', 'pelle', 'di', 'pollo']
>>> index = my_list.index(item) if item in my_list else -1
>>> index
2
>>> item = 'pluto'
>>> index = my_list.index(item) if item in my_list else -1
>>> index
-1

Per altro, l'operatore "in" restituirà solo il caso un "item" sia presente o meno in una lista, mentre il metodo index restituirà sempre e comunque la prima evenienza di quanto cercato, nel caso di più presenze del termine cercato bisognerebbe o procedere di slicing ricorsivamente oppure esaminare i singoli elementi, magari con una comprehension ... Ti faccio un esempio di questo secondo metodo :
Come noterai, la parola "di" è contenuta più volte in my_list, potremmo estrarre tutti gli indici che la riguardano con una unica istruzione utilizzante una comprehension così :

>>> item = 'di'
>>> indexes = [i for i in range(len(my_list)) if my_list[i] == item]
>>> indexes
[2, 7, 9]
>>>


... ancora, le ricerche prima esposte riguardano una uguaglianza "esatta", nel caso si voglia verificare che un item sia parte di uno o più elementi di una lista, una ricerca elementare potrebbe essere di vedere se esso è "contenuto" nel singolo dato, p.e. : vogliamo l'indice di tutte le parole che presentano la seguenza 'll':

>>> item = 'll'
>>> indexes = [i for i in range(len(my_list)) if item in my_list[i]]
>>> indexes
[0, 3, 6, 8, 10]

 ricerche più raffinate potrebbero essere effettuate tramite tramite i metodi delle stringhe, o meglio ancora con le espressioni regolari (mia bestia nera in tutti i linguaggi )

... magari conosci già quanto sopra, se così scusami ma ho ritenuto di integrare la mia precedete risposta con il "minimo sindacale" per l'argomento.

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Re:[risolto] Entry di ricerca
« Risposta #4 il: Giugno 22, 2020, 12:00 »
Grazie mille ancora, la sua risposta mi ha aiutato a migliorare ulteriormente il mio "sistema di ricerca", ma nonostante questo sarei interessato a chiederTi un'altra cosa. Se io volessi creare un sistema di ricerca per somiglianza che algoritmo o metodo dovrei utilizzare? (per farTi un esempio il sistema di ricerca di google). Dopo una breve ricerca ho trovato questo:
https://it.wikipedia.org/wiki/PageRank
e come spiegazione ulteriore al  link precedente questo:
https://support.google.com/webmasters/answer/70897?hl=it.
Dal primo link vedendo l'algoritmo mi sono chiesto se sapessi come implementarlo viso che io non ci sono riuscito.
Grazie ancora.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 381
  • Punti reputazione: 0
    • Mostra profilo
Re:[risolto] Entry di ricerca
« Risposta #5 il: Giugno 22, 2020, 12:39 »
Per prima cosa definisci cosa intendi con "sistema di ricerca per somiglianza", il ranking di una pagina non penso proprio sia cosa analoga, cosa ci darebbe il Pk?, quali sarebbero "i link"? ... Oltre tutto ci sarebbe una certa dose di aleatorietà discrezionale da parte di google, a quanto leggo ...

... poi, con me caschi un po' male in merito agli "algoritmi", ho dato 'na guardata al processo markoviano e mi è mancato il respiro, sono più di 40 anni che mi son diplomato, diciamo che sono un tantino "arrugginito" in materia, anche se poi ci si può sempre mettere, ma non certo improvvisare al momento.

Comunque, son pur sempre argomenti capaci di stimolare le meningi, aspetto per me sempre interessante, se ritieni di volerci provare poni una casistica ben precisa e chiara, ci si ragiona sopra e poi si cerca, si ipotizza un approccio e si prova, il tutto senza fretta (lavoro e famiglia danno tempi "stretti") e per il solo piacere "di farlo" ... magari, se proprio non si riesce, poi gridiamo assieme  "Help me!" ;)

[Edit] Riferisci, forse, a comparazioni di questo genere?
« Ultima modifica: Giugno 23, 2020, 07:56 da nuzzopippo »

Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Re:[risolto] Entry di ricerca
« Risposta #6 il: Giugno 24, 2020, 14:41 »
Ok grazie mille, come mi hai consigliato proverò senza fretta a provare a risolvere il problema e magari veramente alla fine dovrò gridare con te "help me"😂. Detto questo alla fine quando avrò risolto questo problema posterò il mio codice per dare anche supporto agli altri utenti. Buona giornata a tutti.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 381
  • Punti reputazione: 0
    • Mostra profilo
Re:[risolto] Entry di ricerca
« Risposta #7 il: Giugno 25, 2020, 08:04 »
Ok grazie mille, come mi hai consigliato proverò senza fretta a provare a risolvere il problema e magari veramente alla fine dovrò gridare con te "help me"😂. ...

beh @Giampatrizio, la mia era una proposta di esporre in maniera chiara e dettagliata la Tua finalità e di provare ad affrontarla assieme, malgrado il mio scarso tempo disponibile, ciò motivava lo "help me" congiunto ;)

In ogni caso, affrontare "personalmente" una problematica è la cosa migliore perché meno dispersiva e permette di prendersi il tempo "giusto" per riflettere e provare, senz'altro far "da se" è il mezzo più efficace per apprendere "bene" ... son certo posterai un buon codice, buon lavoro :)