Для второго есть встроенный строковый метод, который делает это:
>>> print ','.join(str(x) for x in li2)
"0,1,2,3,4,5,6,7,8"
Для первого вы можете использовать соединение в списке понимания:
>>> print ",".join([",".join(str(x) for x in li])
"0,1,2,3,4,5,6,7,8"
Но проще использовать itertools.flatten:
>>> import itertools
>>> print itertools.flatten(li)
[0,1,2,3,4,5,6,7,8]
>>> print ",".join(str(x) for x in itertools.flatten(li))
"0,1,2,3,4,5,6,7,8"
Примечание: itertools - это модуль, который помогает вам решать общие задачи с итераторами, такими как список, кортежи или строки ... Это удобно, потому что он не хранит копию структуры, над которой вы работаете, а обрабатывает элементы один за другим.
РЕДАКТИРОВАТЬ: смешно, я учусь много способов сделать это. Кто сказал, что есть только один хороший способ сделать это?