Вот способ решить ваш вопрос с помощью groupby
из модуля itertools
:
from itertools import groupby
def rep_adj(data, char='z'):
for _, v in groupby(data):
b = list(v)
if len(b) > 0:
for i, j in enumerate(b):
yield char if not i%2==0 else j
data = 'xyxxxyx'
out = ''.join(rep_adj(data))
print(out)
Вывод:
'xyxzxyx'
Я не использовал меня, но похоже, что PSTricks предлагает некоторую Диаграмму Гантта, тянущую возможности.
Основной сайт PSTricks: http://tug.org/PSTricks/main.cgi
Пример Диаграммы Гантта с помощью PSTricks: http://tug.org/PSTricks/main.cgi?file=Examples/Charts/gantt
Есть пакет pst-gantt. Плохая новость заключается в том, что вам придется самостоятельно рисовать зависимости между задачами. Поэтому для рисования линий и стрелок нужно использовать макрос \psline
.