Closed
Description
The attached file has a candidate function for a flatten command. The default types to flatten are lists and tuples, but more can be added.
def flatten(in_list, ltypes=(list, tuple)):
"""
Flattens a nested list.
INPUT:
in_list -- a list or tuple
ltypes -- optional list of particular types to flatten
OUTPUT:
a flat list of the entries of in_list
EXAMPLES:
sage: flatten([[1,1],[1],2])
[1, 1, 1, 2]
sage: flatten((['Hi',2,vector(QQ,[1,2,3])],(4,5,6)))
['Hi', 2, (1, 2, 3), 4, 5, 6]
sage: flatten((['Hi',2,vector(QQ,[1,2,3])],(4,5,6)),ltypes=(list, tuple, sage.modules.vector_rational_dense.Vector_rational_dense))
['Hi', 2, 1, 2, 3, 4, 5, 6]
"""
index = 0
new_list = [x for x in in_list]
while index < len(new_list):
if not new_list[index]:
new_list.pop(index)
continue
while isinstance(new_list[index], ltypes):
new_list[index : index + 1] = list(new_list[index])
index += 1
return new_list
Component: basic arithmetic
Keywords: lists, flatten
Issue created by migration from https://trac.sagemath.org/ticket/395