Created by [CecilWesterhof].
At a certain point I needed the maximum, minimum and mean of a list. Instead of calculating them one after the other I created a proc that calculates everything in one go. And also length and sum. (But [KPV] pointed out that there is http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/math/statistics.html#10%|%::math::statistics::basic-stats%|%. So I do not need this any-more.
This is the proc:
======
proc listNumericStats {thisList} {
set length [llength ${thisList}]
if {${length} == 0} {
error "List cannot be empty"
}
set max [lindex ${thisList} 0]
set min ${max}
set sum 0.
foreach element ${thisList} {
set sum [expr {${sum} + ${element}}]
if {${element} < ${min}} {
set min ${element}
} elseif {${element} > ${max}} {
set max ${element}
}
}
dict set stats length ${length}
dict set stats max ${max}
dict set stats mean [expr {${sum} / ${length}}]
dict set stats min ${min}
dict set stats sum ${sum}
return ${stats}
}
======
DEC:That sounds over kill to me
======
set aList [ lsort -real $anotherList]
set max [ lindex $aList end]
set min [ lindex $aList 0]
set sum [expr {[join $aList "+"]}]
set len [llength $aList ]
set mean [ expr {$sum/$len}]
======
DEC:I would avoid looping over a list at the script level if you can
[CecilWesterhof]: With your code you loop two times over the list instead of once. And you need a sort also, which is also not cheap for big lists. So I would think that my implementation is a lot more efficient.
But it is mute, because I do not need it any-more thanks to [KPV].
[KPV]: Also checkout http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/math/statistics.html#10%|%::math::statistics::basic-stats%|%
<>Numerics