つまり、1 から最大までのすべての長さです (リストにその長さの文字列がない場合、一部のリストは空になりa
ます)。
>>> a = ['a', 'b', 'ab', 'abc']
>>> m = max(len(x) for x in a)
>>> print [[x for x in a if len(x) == i + 1] for i in range(m)]
[['a', 'b'], ['ab'], ['abc']]
ただし、含まれている長さのリストのみが必要な場合は、範囲の代わりにa
使用する必要があります。set(len(i) for i in lst)
>>> print [[x for x in a if len(x) == i] for i in set(len(k) for k in a)]
[['a', 'b'], ['ab'], ['abc']]
リストに違いはありません['a', 'b', 'ab', 'abc']
。しかし、 so: のように少し変更すると[['a', 'b'], ['ab'], ['abcd']]
、違いがわかります。
>>> a = ['a', 'b', 'ab', 'abcd']
>>> print [[x for x in a if len(x) == i] for i in set(len(k) for k in a)]
[['a', 'b'], ['ab'], ['abcd']]
>>> print [[x for x in a if len(x) == i + 1] for i in range(max(len(x) for x in a))]
[['a', 'b'], ['ab'], [], ['abcd']]