Source code for fancytools.fcollections.MultiList

# -*- coding: utf-8 -*-

[docs]class MultiList(object): ''' create a list of named lists. can be used as like a normal list but allows to get entries from direct from sublists >>> l = MultiList('spam','eggs') >>> l.extend( ([1,2],[3,4]) ) >>> print l.spam [1, 2] >>> print l.eggs [3, 4] >>> print l[1] [2, 4] ''' #TODO: better as named numpy.array def __init__(self, *names): self._lists = [] for name in names: self.__setattr__(name,[]) self._lists.append(self.__getattribute__(name))
[docs] def extend(self, args): for l,arg in zip(self._lists, args): l.extend(arg)
[docs] def append(self, args): for l,arg in zip(self._lists, args): l.append(arg)
[docs] def pop(self, index): for l in self._lists: l.pop(index)
[docs] def insert(self, index, args): for l,arg in zip(self._lists, args): l.insert(index, arg)
def __setitem__(self, index, args): for l,arg in zip(self._lists, args): l[index] = arg def __getitem__(self, index): out = [] for l in self._lists: out.append(l[index]) return out def __len__(self): return len(self._lists[0]) def __iter__(self): self._n = -1 self._l = len(self._lists[0])-1 return self
[docs] def next(self): self._n+=1 if self._n > self._l: raise StopIteration() return (x[self._n] for x in self._lists)
if __name__ == "__main__": import doctest doctest.testmod()