Однострочный, простой для понимания (менее легко настраиваемый :)), использующий str.rsplit
с maxsplit, постепенно увеличивающимся до количества точек:
lst = ['C04.123.123.123', 'C03.456.456.456', 'C05.789.789.789']
result = [x.rsplit(".",i)[0] for x in lst for i in range(x.count(".")+1) ]
результат:
['C04.123.123.123',
'C04.123.123',
'C04.123',
'C04',
'C03.456.456.456',
'C03.456.456',
'C03.456',
'C03',
'C05.789.789.789',
'C05.789.789',
'C05.789',
'C05']
Единственное, что меня раздражает, это то, что он вызывает split
много, чтобы сохранить первый элемент.Жаль, что нет встроенной функции lazy split
, которую мы могли бы вызвать next
on.