Now i am not saying this is better in any way unless you consider compact code better. Your version (which is very ok imo) is much more readable and maintainable.
list_ = ["This", "is", "a", "sentence", "of", "seven", "words"]
# for python 2 filter returns() a list
result = filter(None,[[x for x in list_ if len(x) == i] for i in range(len(max(list_, key=lambda y: len(y)))+1)])
# for python 3 filter() returns an iterator
result = list(filter(None,[[x for x in list_ if len(x) == i] for i in range(len(max(list_, key=lambda y: len(y)))+1)]))