-
FundamentalsArrays
Description I dont't like nesting more than 2 times, so I inverted the condition. Also, extracting the generator is more idiomatic way to convert it to list + it looks prettier for me.
Code def flatten_list(lst): def flatten(l): for i in l: if not isinstance(i, (list, tuple)): yield i continue for j in flatten_list(i): yield j return [*flatten(lst)]
Test Cases import codewars_test as test from solution import flatten_list .describe("Fixd tests") def test_group(): .it("test case 1:") def test_case(): s1 = [[0, 1, 2], [3, 4], [5, 6], [7, 8], [9]] s2 = [[0, 1, 2, 3, 4], [5, 6, 7, 8], [9]] s3 = [[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]] e1 = [0, 1, 2, 3, 4, 5, 6, 7,8, 9] e2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] e3 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] samples = [s1, s2, s3] expected = [e1, e2, e3] for s, e in zip(samples, expected): test.assert_equals(flatten_list(s),e) .describe("Random tests") def test_group(): .it("test case 2:") def test_case(): s1 = [[0, 1, 2], (3, 4), [5, 6], (7, 8), [9]] s2 = [[0, 1, 2, 3, 4], [5, 6, 7, 8], (9)] s3 = [(0), [1], (2), [3], (4), [5], (6), [7], (8), [9]] e1 = [0, 1, 2, 3, 4, 5, 6, 7,8, 9] e2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] e3 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] samples = [s1, s2, s3] expected = [e1, e2, e3] for s, e in zip(samples, expected): test.assert_equals(flatten_list(s),e) def test_group(): .it("test case 1:") def test_case(): s1 = [0, [1, 2], 3, [4, 5], 6, [7, 8], 9] s2 = [0, 1, 2, [3, 4, 5], 6, 7, 8, [9]] s3 = [0, [1], 2, [3], 4, [5], 6, [7], 8, [9]] s4 = [0, 1, 2, [3, 4, [5], []], [6], 7, 8, [9,[]]] e1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] e2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] e3 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] e4 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] samples = [s1, s2, s3, s4] expected = [e1, e2, e3, e4] for s, e in zip(samples, expected): test.assert_equals(flatten_list(s),e) .it("test case 2:") def test_case(): s1 = [[[[[[[[-1]]]]]]]] s2 = [1, 2, [3, 4, [5], ['code']], [6, [[[7, 'warz']]], 8, [[[9,[]]]]]] s3 = ['code', [[[[1, 2, 3], 4], 5]], 6, 7, [[], 8], [9, [[], 'warz']]] e1 = [-1] e2 = [1, 2, 3, 4, 5, 'code', 6, 7, 'warz',8, 9 ] e3 = ['code', 1, 2, 3, 4, 5, 6, 7, 8, 9, 'warz'] samples = [s1,s2, s3] expected = [e1, e2, e3] for s, e in zip(samples, expected): test.assert_equals(flatten_list(s),e) .describe("Edge Cases") def test_group(): .it("test case 1:") def test_case(): s1 = [0, 1, (2, 3), [[4, 5, (6, 7, (8,), [9]), 10]], (11,)] s2 = [0, [[[1]]], ([2, 3], [4, [[5, 6]]])] s3 = [1, [3], (1, 6), [[3, 8]], [[[5]]], 9, ((((2,),),),)] s4 = ['eat', (0, ([1, 2, [3, [['sleep', [[4]]]]], (((6,),),), 'code', 7, [[[8]]], 9]),), 'repeat'] e1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] e2 = [0, 1, 2, 3, 4, 5, 6] e3 = [1, 3, 1, 6, 3, 8, 5, 9, 2] e4 = ['eat', 0, 1, 2, 3, 'sleep', 4, 6, 'code', 7, 8, 9, 'repeat'] samples = [s1, s2, s3, s4] expected = [e1, e2, e3, e4] for s, e in zip(samples, expected): test.assert_equals(flatten_list(s),e)
Output:
-
Code - def flatten_list(lst):
- def flatten(l):
- for i in l:
if isinstance(i, (list, tuple)):for j in flatten_list(i):yield jelse:- if not isinstance(i, (list, tuple)):
- yield i
return list(flatten(lst))- continue
- for j in flatten_list(i):
- yield j
- return [*flatten(lst)]
- All
- {{group.name}} ({{group.count}})
This comment has been reported as {{ abuseKindText }}.
Show
This comment has been hidden. You can view it now .
This comment can not be viewed.
- |
- Reply
- Edit
- View Solution
- Expand 1 Reply Expand {{ comments?.length }} replies
- Collapse
- Remove
- Remove comment & replies
- Report
{{ fetchSolutionsError }}