Portál AbcLinuxu, 11. května 2025 06:22

Dotaz: Serazeni seznamu dle casu

29.11.2008 17:08 Pavel H.
Serazeni seznamu dle casu
Přečteno: 277×
Odpovědět | Admin

Dobrý den,

měl bych takový dotaz, jak mám seřadit seznam, podle dosažených časů. Příklad seznamu přikládám:

JMENA                                   CAS
Chloupková     Jana            56 34
Korejčíková     Dáďa            45 36
Havlíčková     Vendula         67 03
Nosálová     Eliška               78 07
Hejtmánková     Kateřina    57 11
Kalinová     Markéta             61 42
Kučerová     Lada                 59 42
Šimková     Markéta              60 16
Karasová     Jana                 45 48
Tloušťová     Eva                    56 31

Razeni n-tice mi je jasný, ale takovéto řazení jsem ještě nedokázal  vyřešit.  Předem děkuji za pomoc. Pavel H.

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.11.2008 17:36 Pavel H.
Rozbalit Rozbalit vše Re: Serazeni seznamu dle casu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě dodatek-programovací jazyk Python. dík
29.11.2008 17:37 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Serazeni seznamu dle casu
Odpovědět | | Sbalit | Link | Blokovat | Admin

sort umí řadit pouze podle určitých sloupců (-k), pokud by dělaly problémy různé počty mezer, tak určitě půjde napsat nějaký přehazovací regexp v sedu, který ty časy přesune na začátek řádku. Tam by se potom normálně seřadily a potom by je další regexp vrátil na původní místo...

I am always ready to learn although I do not always like to be taught. (W. Churchill)
David Watzke avatar 29.11.2008 22:06 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Serazeni seznamu dle casu
sed -r 's/([0-9]+) ([0-9]+)/\1\2/g' casy.txt | sort -k 3 | sed -r 's/([0-9]{2}$)/ \1/'
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
30.11.2008 03:26 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Serazeni seznamu dle casu
Odpovědět | | Sbalit | Link | Blokovat | Admin

V Pythonu si můžete napsat zcela libovolnou funkci, která se aplikuje na každý prvek v seznamu. Při řazení se porovnává to, co ta funkce vrací. Viz princip decorate-sort-undecorate.

Pochopil jsem správně, že poslední dva řádky jsou minuty a sekundy?

 

#!/usr/bin/python
#coding: utf-8

lidi = '''Chloupková     Jana            56 34
Korejčíková     Dáďa            45 36
Havlíčková     Vendula         67 03
Nosálová     Eliška               78 07
Hejtmánková     Kateřina    57 11
Kalinová     Markéta             61 42
Kučerová     Lada                 59 42
Šimková     Markéta              60 16
Karasová     Jana                 45 48
Tloušťová     Eva                    56 31'''.split('\n')

def deco(radek):
    splitted = radek.split()
    minuty = int(splitted[2])
    sekundy = int(splitted[3])
    return minuty * 60 + sekundy

lidi.sort(key = deco)
for x in lidi: print x

 

30.11.2008 10:49 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Serazeni seznamu dle casu

…poslední dva sloupce jsem chtěl říct ;-)

2.12.2008 21:48 Pavel H.
Rozbalit Rozbalit vše Re: Serazeni seznamu dle casu

Děkuji moc za radu, velice mi to pomohlo.

Zdraví Pavel H.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.