Чтобы сделать это в целом, я бы, вероятно, сделал:
source = 'Company.Dept.Group.Team'
split_source = source.split('.')
results = ['.'.join(split_source[0:x]) for x in xrange(len(split_source) - 1, 0, -1)]
print results
Дословный перевод будет больше похож на:
source = 'Company.Dept.Group.Team'
temp = source
results = []
while True:
i = temp.rfind('.')
if i < 0:
break
temp = temp[0:i]
results.append(temp)
print results
Или, если вы предпочитаете:
source = 'Company.Dept.Group.Team'
temp = source
results = []
try:
while True:
temp = temp[0:temp.rindex('.')]
results.append(temp)
except ValueError:
pass
print results
Или:
source = 'Company.Dept.Group.Team'
temp = source
results = []
i = temp.rfind('.')
while i > 0:
temp = temp[0:i]
results.append(temp)
i = temp.rfind('.')
print results
Как вы указали, тот факт, что вы не можете рассматривать присваивание как выражение, делает эти случаи немного неэлегансными. Я думаю, что первые случаи (например, «Верно») встречаются чаще, чем последние.
Для дополнительной информации, этот пост выглядит довольно хорошо: http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm