Portál AbcLinuxu, 11. května 2025 06:22
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.
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 sed
u, 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...
sed -r 's/([0-9]+) ([0-9]+)/\1\2/g' casy.txt | sort -k 3 | sed -r 's/([0-9]{2}$)/ \1/'
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
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.