Portál AbcLinuxu, 15. května 2025 05:08
import string string_array = ['Jozko', 'mal', 'mal', 'ranajky', 'polievku', 'zvysila','Jozko', 'mal','mal', 'sa', 'mu', 'od', 'vcera','polievku','zvysila'] for i in range(len(string_array)): if string_array.count(string_array[i]) > 1: added_word_counter = 0 while True: added_word_counter += 1 searched_string = string_array[i] for j in range(added_word_counter): searched_string += ' ' + string_array[i + j + 1] if string.count(searched_string) > 1: print '>>>>' + searched_string + ': ' + str(string.count(searched_string)) else: breaka malo by to vypisat :
>>>>Jozko mal mal >>>>>polevku zvysilaale vypisuje mi tam nejaku chybu...vie nniekto poradit?
Řešení dotazu:
if string.countNevola se nahodou metoda na objekt ne na modul?
Traceback (most recent call last): File "test.py", line 14, in <module> if string.count(searched_string) > 1: File "/usr/lib/python2.7/string.py", line 348, in count return s.count(*args) TypeError: count() takes at least 1 argument (0 given)Pak se stačí podívat do dokumentace, co vlastně metoda
count
očekává.
cnts = {} for word in string_array: cnts[word] = cnt.setdefault(word,0) + 1
ale vypisuje mi tam nejaku chybu...vie nniekto poradit?Napadla mě nějaká rada.
" ".join(string_array[i:j])Podobnych konstrukci kterymi si jen hazis klacky pod nohy tam mas vice, ale bez znalosti zadani tezko radit.
A B A B C A B C D A B C D EMá se vypsat pouze
A B
, protože je tam nejvícekrát, pouze A B C D
, protože je nejdelší, něco jiného ...?
A B C B C D C D A D A BTady by se mělo vypsat co? Jsou tam čtyři sekvence, které se všechny vyskytují právě dvakrát, a překrývají se. Takový problém je prostě zapotřebí specifikovat přesně.
#!/usr/bin/python import sys, re def only_multiple_occurences(d): return dict((k, v) for k, v in d.iteritems() if len(v) > 1) def add_to_dict_list(d, k, x): if k in d: d[k].append(x) else: d[k] = [x] # Get words. words = list(re.findall(r'\w+', sys.stdin.read())) nwords = len(words) # Find all bigrams with mutliple occurences and gather their positions. n = 2 allngrams = [None, words, {}] ngrams = allngrams[n] for i in range(nwords+1-n): add_to_dict_list(ngrams, tuple(words[i:i+2]), i) allngrams[n] = only_multiple_occurences(ngrams) # Find all longer n-grams, searching only at positions of already found shorter # n-grams. while allngrams[n]: prevngrams = allngrams[n] n += 1 allngrams.append({}) ngrams = allngrams[n] for prevngram, positions in prevngrams.iteritems(): for i in positions: if i + n <= nwords: add_to_dict_list(ngrams, prevngram + (words[i+n-1],), i) allngrams[n] = only_multiple_occurences(ngrams) # Print the n-grams, starting from the longest while excluding all n-grams that # are part of any longer n-gram. n -= 1 excluded = {} while n >= 2: nextexcluded = set() for ngram, positions in allngrams[n].iteritems(): if ngram not in excluded: print ' '.join(ngram) + ' (%ux)' % len(positions) nextexcluded.add(tuple(ngram[1:])) nextexcluded.add(tuple(ngram[:-1])) excluded = nextexcluded n -= 1
1. Behem prvniho pruchodu presstring_array
zjistit pocet vyskutu vsech slov a neuvazovat ty, ktere se vyskutuji min nez 2 krat 2. Behem druheho pruchodu presstring_array
najit nejdelsi retezec, jehoz vsechna slova, jsou v seznamu (slovniku) vytvorenem v 1.kroku 3. Konec
string_array = ['Jozko', 'mal', 'mal', 'ranajky', 'polievku', 'zvysila','Jozko', 'mal','mal', 'sa', 'mu', 'od', 'vcera','polievku','zvysila'] #Prvni pruchod - pocitani vyskytu cnts = {} for word in string_array: cnts[word] = cnts.setdefault(word,0) + 1 valids = [v for v in cnts.keys() if cnts[v] > 1] #Druhy pruchod - hledani nejdelsiho vyhovujiciho retezce max = {'beg': 0, 'end': 0} cur = {'beg': 0, 'end': 0} for pos in range(len(string_array)): if string_array[pos] in valids: cur['end'] += 1 if not string_array[cur['beg']] in valids: cur['beg'] = pos else: if (cur['end'] - cur['beg']) > (max['end'] - max['beg']): max['end'] = cur['end'] max['beg'] = cur['beg'] cur['beg'] = pos cur['end'] = pos print string_array[max['beg']:max['end']+1]
Jozko mal mal polevku zvysilapotom nedokáže v deseti příspěvcích popsat, co to přesně má dělat obecně, a na otázky po upřesnění odpovídá nejasnými kecy, které lze interpretovat deseti způsoby, a nakonec označí za řešení nesmyslný program jiného experta, který nevypíše, co má, ani na tom zasraném jednoduchém úvodním příkladu, natož na těch A B C..., které jsem psal já. Pokud Kamile napíšeš (resp. nenapíšeš, toho jsi nebyl schopen, a muselo se to z tebe složitě dostávat), že má program najít nějaké nejdelší opakující se podsekvence a tenhle program považuješ za řešení, tak se nech vyšetřit. A hlavně se prosím nikdy nepokoušej o programování.
A B C A B C A B C A B C
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.