data.py
37 lines
| 1.2 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r2498 | # encoding: utf-8 | ||
"""Utilities for working with data structures like lists, dicts and tuples. | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
Matthias BUSSONNIER
|
r5390 | # Copyright (C) 2008-2011 The IPython Development Team | ||
Brian Granger
|
r2498 | # | ||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
Thomas Kluyver
|
r13356 | from .py3compat import xrange | ||
Brian Granger
|
r2498 | def uniq_stable(elems): | ||
"""uniq_stable(elems) -> list | ||||
Return from an iterable, a list of all the unique elements in the input, | ||||
but maintaining the order in which they first appear. | ||||
W. Trevor King
|
r9249 | Note: All elements in the input must be hashable for this routine | ||
to work, as it internally uses a set for efficiency reasons. | ||||
""" | ||||
seen = set() | ||||
return [x for x in elems if x not in seen and not seen.add(x)] | ||||
Brian Granger
|
r2498 | |||
def flatten(seq): | ||||
"""Flatten a list of lists (NOT recursive, only works for 2d lists).""" | ||||
return [x for subseq in seq for x in subseq] | ||||
Thomas Kluyver
|
r9471 | |||
Brian Granger
|
r2498 | |||
def chop(seq, size): | ||||
"""Chop a sequence into chunks of the given size.""" | ||||
Thomas Kluyver
|
r9471 | return [seq[i:i+size] for i in xrange(0,len(seq),size)] | ||
Brian Granger
|
r2498 | |||