Forum » Programiranje » Python - pomoč!
Python - pomoč!
MP125 ::
Zdravo. Zanima me kako rešiti naslednji problem:
Dan je seznam števil. Sestavi funkcijo najParSestej(seznam), ki bo v njem poiskala vse tiste pare, ki dajo največjo absolutno razliko. Funkcija naj vrne seznam parov indeksov, ki določajo najdene pare. Vhodnega seznama naj ne spreminja. To preveri tako, da si ogledeš seznam pred in po klicu! Funcija naj vrne števili kot urejen seznam!
Predpostavka je, da imamo v seznamu vsaj dva elementa in da so vsi elementi v seznamu števila. Primer: za vhodni seznam [1, 4, 3, -1, 0, 3.5, 4] naj funkcija vrne [[1, 3], [3, 6]]. Za seznam [100, 5, -5] dobimo [[0, 2]], za seznam [1, 2, 3, 4, 5] naj vrne seznam [[0, 4]], za seznam [100, -6, -6, 100] naj vrne [[0, 1], [0, 2], [1, 3], [2, 3]].
To funkcijo imam rešeno, sedaj pa je potrebno to funkcijo dodelati, da bo poleg števil v seznamu dopuščala tudi nize, ki predstavljajo števila in sezname z natanko enim elementom - številom, npr. "5", "-34", [6.27], [2], "8.23", "-23.6", ...
Kako naj se lotim tega?
Dan je seznam števil. Sestavi funkcijo najParSestej(seznam), ki bo v njem poiskala vse tiste pare, ki dajo največjo absolutno razliko. Funkcija naj vrne seznam parov indeksov, ki določajo najdene pare. Vhodnega seznama naj ne spreminja. To preveri tako, da si ogledeš seznam pred in po klicu! Funcija naj vrne števili kot urejen seznam!
Predpostavka je, da imamo v seznamu vsaj dva elementa in da so vsi elementi v seznamu števila. Primer: za vhodni seznam [1, 4, 3, -1, 0, 3.5, 4] naj funkcija vrne [[1, 3], [3, 6]]. Za seznam [100, 5, -5] dobimo [[0, 2]], za seznam [1, 2, 3, 4, 5] naj vrne seznam [[0, 4]], za seznam [100, -6, -6, 100] naj vrne [[0, 1], [0, 2], [1, 3], [2, 3]].
To funkcijo imam rešeno, sedaj pa je potrebno to funkcijo dodelati, da bo poleg števil v seznamu dopuščala tudi nize, ki predstavljajo števila in sezname z natanko enim elementom - številom, npr. "5", "-34", [6.27], [2], "8.23", "-23.6", ...
def najParSestej(seznam): i=0 najvecjaRazlika = 0 pari = [] while i < len(seznam): j=i while j < len(seznam): razlika = abs(float(seznam[i])-float(seznam[j])) if razlika > najvecjaRazlika: najvecjaRazlika = razlika pari=[] pari.append([i,j]) elif razlika == najvecjaRazlika: pari.append([i,j]) j+=1 i+=1 return pari
Kako naj se lotim tega?
- spremenil: Mavrik ()
Mavrik ::
Za naslednjič - forum ima st.koda značko, s katero postane lepljena koda bistveno bolj berljiva ;)
The truth is rarely pure and never simple.
Yacked2 ::
Največji par je lahko samo en ? Iz seznama poišči največje ter najmanjše število, ter jih vrni ?
v Javi: (ne testirano)
v Javi: (ne testirano)
private static int[] najParSestej (int[] seznam) { int najmanjsa = seznam[0]; int najvecja = seznam[0]; for(int i=1;i<seznam.length;i++) { if(seznam[i] < najmanjsa) { najmanjsa = seznam[i]; } if(seznam[i] > najvecja) { najvecja = seznam[i]; } } int[] resitev = new int[2]; resitev[0] = najmanjsa; resitev[1] = najvecja; return resitev; }
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!
Math Freak ::
En način je da pogledaš, če je eden od elementov seznama seznam. Iz njega potegneš ven en element, saj dva ali več ne sme imeti. Za nize maš že tko poskrbljeno, saj jih pretvoriš v float.
def najParSestej(seznam): i=0 najvecjaRazlika = 0 pari = [] while i < len(seznam): j=i while j < len(seznam): if type(seznam[i]) is list: if type(seznam[j]) is list: razlika = abs(float(seznam[i][0])-float(seznam[j][0])) else : razlika = abs(float(seznam[i][0])-float(seznam[j])) elif type(seznam[j]) is list: razlika = abs(float(seznam[i])-float(seznam[j][0])) else: razlika = abs(float(seznam[i])-float(seznam[j])) if razlika > najvecjaRazlika: najvecjaRazlika = razlika pari=[] pari.append([i,j]) elif razlika == najvecjaRazlika: pari.append([i,j]) j+=1 i+=1 return pari print(najParSestej([1, 4, 3, -1, 0, 3.5, 4])) print(najParSestej([100, 5, -5])) print(najParSestej([1, 2, 3, 4, 5])) print(najParSestej([100, -6, -6, 100])) print(najParSestej(["5", "-34", [6.27], [2], "8.23", "-23.6"]))
technolog ::
[1, 4, 3, -1, 0, 3.5, 4]
a ni tukaj rešitev samo ena, in sicer: [3, 1], razlika pa je 5?
a ni tukaj rešitev samo ena, in sicer: [3, 1], razlika pa je 5?
lknix ::
much fun :)
from itertools import product from functools import wraps def cast_type(f): @wraps(f) def _cast(seznam): nov_seznam = map(lambda stevilo: float(stevilo[0]) if isinstance(stevilo, list) else float(stevilo), seznam) return f(nov_seznam) return _cast @cast_type def najPrestej(seznam): def f(stevilo): return lambda x: x[1] == stevilo min_val, max_val = min(seznam), max(seznam) return map(lambda par: sorted((par[0][0], par[1][0])), product(filter(f(min_val), enumerate(seznam)), filter(f(max_val), enumerate(seznam))))
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | python-rabim pomočOddelek: Programiranje | 2786 (1016) | rnla1973 |
» | Python - pomoč (strani: 1 2 3 )Oddelek: Programiranje | 18123 (8871) | black ice |
» | Programiranje v pythonuOddelek: Programiranje | 2058 (1416) | Sony-Tech |
» | [Python] Domači nalogiOddelek: Programiranje | 3074 (1964) | ragezor |
» | Python iskanje podvojenih vrednostiOddelek: Programiranje | 1496 (1209) | BlueRunner |