>>14857
Вы бы хоть ссылку правильную указать потрудились. Да и кодогольф как мерило языка - занятие бесполезное.
from itertools import chain, groupby, repeat; from pathlib import Path; for p, t in chain.from_iterable([chain([("type", "path")], list(zip(repeat(x, 10), y)), [("", f"(another {len(list(y))+1})")] if next(y, None) else []) for x, y in groupby(sorted(Path('/proc').iterdir(), key=lambda x: x.lstat().st_mode), key=lambda x: x.lstat().st_mode)]): print("{!s:<30}{:<10}".format(y, x))
Дешифратор st_mode и/или использование массивов вместо итераторов оставлю для читателя. Если хочется избавиться от лишней новой строки, то тривиально оборачивается в list(starmap(lambda x, y: ..., chain.from_iterable(...))) or None
.
Или если хочется ближе к нормальной логике операций:
format="{:<30}{:<10}"; for ftype, items in groupby(sorted(Path('/proc').iterdir(), key=lambda x: (x.lstat().st_mode, str(x))), key=x.lstat().st_mode): [print(i) for i in ([format.format("path", "type")] + [format.format(str(path), ftype) for path in (islice(items, 0, 10))] + [f"(another {len(list(items))+1})\n" if next(items, False) else ""])] and None
chain()
в первом только на случай UB.
А теперь жду вашу версию без ;.