Gå til innhold

[løst]Liste problem, python


Anbefalte innlegg

Jeg skal lage et program som tar inn et ord som input og dereter sjekker om dette er et norskt ord. Tenkte å gjøre det ved å sjekke ordet opp mot en liste som består av alle de norske ordene.

 

Problemet er at listen er på formen:

 

ord1

ord2

ord3

ord4

etc

 

Hadde det ikke vært så mang ord hadde jeg lagt de inn i en tuplet eller en liste. Men det blir ekstremt mye jobb når det er så mange ord. Er det noen andre måter jeg kan få programmet til å gå gjennom denne listen(linje for linje å regne hver linje som et element eller noe)?

Endret av _Viper_
Lenke til kommentar
Videoannonse
Annonse
Jeg skal lage et program som tar inn et ord som input og dereter sjekker om dette er et norskt ord. Tenkte å gjøre det ved å sjekke ordet opp mot en liste som består av alle de norske ordene.

 

Problemet er at listen er på formen:

 

ord1

ord2

ord3

ord4

etc

 

Hadde det ikke vært så mang ord hadde jeg lagt de inn i en tuplet eller en liste. Men det blir ekstremt mye jobb når det er så mange ord. Er det noen andre måter jeg kan få programmet til å gå gjennom denne listen(linje for linje å regne hver linje som et element eller noe)?

 

Ja, flere. Bruk en dictionary, da går oppslaget meget raskt. Den kan skrives til fil via cPicle eller Pickle eller en annen serialiseringsmodul etterpå. Du kan også bruke en database. anydbm, eller sqlite3 (som er bygget inn i Python 2.5).

Lenke til kommentar
Ja, flere. Bruk en dictionary, da går oppslaget meget raskt. Den kan skrives til fil via cPicle eller Pickle eller en annen serialiseringsmodul etterpå. Du kan også bruke en database. anydbm, eller sqlite3 (som er bygget inn i Python 2.5).

 

tror ikke du skjønte helt hva jeg var ute etter, men takk alikevel.

 

Men fant en måte å gjøre det på så problem løst

Lenke til kommentar
Ja, flere. Bruk en dictionary, da går oppslaget meget raskt. Den kan skrives til fil via cPicle eller Pickle eller en annen serialiseringsmodul etterpå. Du kan også bruke en database. anydbm, eller sqlite3 (som er bygget inn i Python 2.5).

 

tror ikke du skjønte helt hva jeg var ute etter, men takk alikevel.

 

Men fant en måte å gjøre det på så problem løst

 

Med mindre du mente noe helt annet enn du spurte om, er det mer trolig at du ikke skjønte svaret.

 

Men du poster kanskje løsningsforslaget ditt, så kan vi se på det?

Lenke til kommentar
Med mindre du mente noe helt annet enn du spurte om, er det mer trolig at du ikke skjønte svaret.

 

Men du poster kanskje løsningsforslaget ditt, så kan vi se på det?

 

haha, kan godt være at jeg ikke skjønte svaret helt å ja :p

ikke sikkert spørsmålet mitt var så godt heller ved nermere etter tanke. Problemet var at listen var i et eget tekstdokument.

 

Det jeg endte med å gjøre var å importere listen inn i python programmet sånn:

importertListe = codecs.open("liste.txt", "r", "utf-8").readlines()

Lenke til kommentar
Det jeg endte med å gjøre var å importere listen inn i python programmet sånn:

importertListe = codecs.open("liste.txt", "r", "utf-8").readlines()

 

 

Ok, sett at filen liste.txt 7000 ord linje for linje.

 

Da må du lese inn fila, lage en liste hver gang og attpåtil sammenligne hvert element sekvensielt. Du må potensielt sammeligne 6999 ganger før du får match. Det er en så cpu-hungrig prosess at det trolig er i strid med gjeldende miljøideologi. Hvis dette er noe som skal gjøres mange ganger i et program, blir det uhyggelig ineffektivt.

 

Jeg foreslår noe slikt

import sys
import os.path
import cPickle

def make_db(words = 'liste.txt'):
# les ord, lag dictionary, lagre som pickle, returner ordliste
db = {}
for word in open(words):
	word = word.strip()
	db[word] = ''
word_db = open('liste.db', 'wb')
p = cPickle.Pickler(word_db)
p.dump(db)
word_db.close()
return db

def read_db(word_db = 'liste.db'):
# les inn pickle, returner dictionary
f = open(word_db, 'rb')
p = cPickle.Unpickler(f)
db = p.load()
f.close()
return db

def db_exists(word_db = 'liste.db'):
return os.path.exists(word_db)

def get_wordlist():
# hvis ordliste DB finnes: hent den, hvis ikke: lag den
if db_exists(): return read_db()
return make_db()

def compare(input_word = ''):
# hvis importert som modul
wordlist = get_wordlist()
if input_word in wordlist:
	return True
return False

if __name__ == '__main__':
# Hvis kalt fra konsoll
input_word = raw_input("Sjekk om ord finnes i orliste: ")
print compare(input_word)
sys.exit(0)

 

Pickle lagrer datastrukturen som fil. Når du leser den inn har du datastrukturen rede. Vel så bra ville ha vært å bruke en database. Enklere til og med. Dersom orlisten vokser, kan du bare slette .db-filen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...