Skip to content

Commit ddafc59

Browse files
committed
feat/list_utils
add util to flatten list, taken from quebra_frases
1 parent e3ba24d commit ddafc59

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

ovos_utils/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,18 @@ def rotate_list(l, n=1):
117117
return l[n:] + l[:n]
118118

119119

120+
def flatten_list(some_list, tuples=True):
121+
_flatten = lambda l: [item for sublist in l for item in sublist]
122+
if tuples:
123+
while any(isinstance(x, list) or isinstance(x, tuple)
124+
for x in some_list):
125+
some_list = _flatten(some_list)
126+
else:
127+
while any(isinstance(x, list) for x in some_list):
128+
some_list = _flatten(some_list)
129+
return some_list
130+
131+
120132
def datestr2ts(datestr):
121133
y = int(datestr[:4])
122134
m = int(datestr[4:6])

test/unittests/test_utils.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import unittest
2-
from ovos_utils import rotate_list, camel_case_split, get_handler_name
2+
3+
from ovos_utils import rotate_list, camel_case_split, get_handler_name, flatten_list
34

45

56
class TestHelpers(unittest.TestCase):
@@ -14,10 +15,22 @@ def some_function():
1415
self.assertEqual(camel_case_split("MyAwesomeSkill"),
1516
"My Awesome Skill")
1617

18+
def test_list_utils(self):
1719
self.assertEqual(rotate_list([1, 2, 3]), [2, 3, 1])
1820
self.assertEqual(rotate_list([1, 2, 3], 2), [3, 1, 2])
1921
self.assertEqual(rotate_list([1, 2, 3], 3), [1, 2, 3])
2022

2123
self.assertEqual(rotate_list([1, 2, 3], -1), [3, 1, 2])
2224
self.assertEqual(rotate_list([1, 2, 3], -2), [2, 3, 1])
2325
self.assertEqual(rotate_list([1, 2, 3], -3), [1, 2, 3])
26+
27+
self.assertEqual(
28+
flatten_list([["A", "B"], ["C"]]), ["A", "B", "C"]
29+
)
30+
self.assertEqual(
31+
flatten_list([("A", "B")]), ["A", "B"]
32+
)
33+
self.assertEqual(
34+
flatten_list([("A", "B"), ["C"], [["D", ["E", ["F"]]]]]),
35+
["A", "B", "C", "D", "E", "F"]
36+
)

0 commit comments

Comments
 (0)