Posted to tcl by emiliano at Wed Mar 25 17:01:14 GMT 2020view pretty
# striding a list; comparison of times # using lmap proc lstride1 {l n} { for {set i 0} {$i < $n} {incr i} { lappend vars var$i } lmap $vars $l { lmap _ $vars { set $_ } } } # using lrange proc lstride2 {l n} { set res {} set len [llength $l] set from 0 set to [expr {$n - 1}] while {$from < $len} { lappend res [lrange $l $from $to] incr from $n incr to $n } return $res } % llenght $data 567784 # confirm that both work as intended % llength [lstride1 $data 14] 40556 % llength [lstride2 $data 14] 40556 % time {lstride $data 14} 5 3195229.4 microseconds per iteration % time {lstride2 $data 14} 5 128583.0 microseconds per iteration # Difference is ~ 25X