* Added list_join, much like dict_join, except for list.

* Added ranges "magic" object to define piecewise ranges.
master
wirawan 14 years ago
parent ffd21689be
commit fcba27ae24
  1. 50
      sugar.py

@ -1,6 +1,6 @@
#!/usr/bin/ipython -pylab
#
# $Id: sugar.py,v 1.4 2010-05-28 18:47:56 wirawan Exp $
# $Id: sugar.py,v 1.5 2010-08-12 19:35:55 wirawan Exp $
#
# Created: 20100121
# Wirawan Purwanto
@ -55,13 +55,59 @@ def dict_slice(Dict, *keys):
def dict_join(*dicts):
"""Join multiple dicts into one, updating duplicate keys from left-to-right
manner.
Thus the key from the rightmost dict will take precedence."""
Thus the items from the rightmost dict will take precedence."""
rslt = {}
for d in dicts:
rslt.update(d)
return rslt
def list_join(*L):
r = []
for i in L:
r += i
return r
class ranges_type:
"""This class is to provide dirty magic to specify piecewice slices
of one-dimensional ranges.
To this end, use the `ranges' instance already defined in this module.
Example:
>>> ranges[1]
[1]
>>> ranges[1, 4, 7, 9]
[1]
>>> ranges[1:7, 9:11]
[1, 2, 3, 4, 5, 6, 9, 10]
>>> rr[1,4,7,9,[2,3,2]] # it even works like this!
[1, 4, 7, 9, 2, 3, 2]
The key is, anything 1-D will be flattened out. So be careful.
Slices must have defined starting and ending points.
Undefined step will be reinterpreted as unit step.
As always: endpoints are not included when using the slicing syntax.
"""
def expand_range(self, rr):
pass
def __getitem__(self, rr):
if "__iter__" in dir(rr):
return list_join(*[ self[r] for r in rr ])
elif isinstance(rr, slice):
if rr.step == None:
step = 1
else:
step = rr.step
return range(rr.start, rr.stop, step)
else:
return [rr]
ranges = ranges_type()
class Parameters(object):
"""A standardized way to define and/or pass parameters (with possible

Loading…
Cancel
Save