-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path6.py
79 lines (59 loc) · 3.13 KB
/
6.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import unittest
def flatten(lst, depth=-1):
"""
Функция для "сплющивания" вложенных списков до указанной глубины.
:param lst: Список, который нужно сплющить.
:param depth: Глубина, до которой нужно сплющить список.
-1 означает бесконечную глубину.
:return: Сплющенный список.
:raises ValueError: Если depth отрицательный и не равен -1.
"""
if not isinstance(depth, int):
raise TypeError("depth должен быть целым числом.")
if depth < -1:
raise ValueError("depth не может быть отрицательным, кроме -1 для бесконечной глубины.")
result = []
for item in lst:
if isinstance(item, list):
if depth > 0:
# Сплющиваем с уменьшением глубины
result.extend(flatten(item, depth - 1))
elif depth == -1:
# Бесконечная глубина
result.extend(flatten(item, depth))
else:
# Текущая глубина достигнута, добавляем как есть
result.append(item)
else:
result.append(item)
return result
class TestFlatten(unittest.TestCase):
def test_flatten_full_depth_default(self):
self.assertEqual(flatten([1, 2, [4, 5], [6, [7]], 8]), [1, 2, 4, 5, 6, 7, 8])
def test_flatten_full_depth_minus_one(self):
self.assertEqual(flatten([1, 2, [4, 5], [6, [7]], 8], depth=-1), [1, 2, 4, 5, 6, 7, 8])
def test_flatten_depth_1(self):
self.assertEqual(flatten([1, 2, [4, 5], [6, [7]], 8], depth=1), [1, 2, 4, 5, 6, [7], 8])
def test_flatten_depth_2(self):
self.assertEqual(flatten([1, 2, [4, 5], [6, [7]], 8], depth=2), [1, 2, 4, 5, 6, 7, 8])
def test_flatten_no_nested_lists(self):
self.assertEqual(flatten([1, 2, 3, 4]), [1, 2, 3, 4])
def test_flatten_empty_list(self):
self.assertEqual(flatten([]), [])
def test_flatten_mixed_depth(self):
self.assertEqual(flatten([1, [2, [3, [4, 5]]]], depth=2), [1, 2, 3, [4, 5]])
def test_flatten_depth_zero(self):
self.assertEqual(flatten([1, [2, [3, [4, 5]]]], depth=0), [1, [2, [3, [4, 5]]]])
def test_flatten_negative_depth(self):
with self.assertRaises(ValueError):
flatten([1, 2, [3]], depth=-2)
def test_flatten_non_integer_depth(self):
with self.assertRaises(TypeError):
flatten([1, 2, [3]], depth=1.5)
def test_flatten_depth_minus_one(self):
self.assertEqual(flatten([1, [2, [3, [4, 5]]]], depth=-1), [1, 2, 3, 4, 5])
def test_flatten_depth_large_number(self):
# Тестируем с большим числом, которое по сути эквивалентно бесконечной глубине
self.assertEqual(flatten([1, [2, [3, [4, 5]]]], depth=100), [1, 2, 3, 4, 5])
if __name__ == '__main__':
unittest.main()