1

サブリストのリストがあり、サブリスト内に文字列があります。

通常、ストリングの長さは異なりますが、同じ長さにすることもできます。

以下はリストの例です

sequences = [['aaa'],['aaaa','bb'],[],['aaaaaa','bb','cccccc']]

各リストから LONGEST 文字列を抽出する方法を見つけたいのですが、同じ長さの文字列が 2 つある場合は、それらの文字列の両方を取得します。

example_output = [['aaa'],['aaaa'],[],['aaaaaa','cccccc']]

通常、forループでしきい値を設定し、特定の長さよりも長い場合はリストに追加し、各反復後にそれをリストに追加します。. . しかし、この場合、しきい値はありません

可能であれば、これは別の関数内にあるため、ラムダと関数の使用を避けたいと思います

4

3 に答える 3

0

次の(不可解な:))ワンライナーでショットを与えます:

example_output = [list(filter(lambda x: len(x)==len(max(sub_lst, key=len)), sub_lst)) for sub_lst in sequences]
于 2013-04-05T15:28:54.620 に答える
0

この答えは最も効率的ではありませんが、理解しやすいものです。

最初に最大長を抽出し (ここではジェネレーター式を使用しています)、次にそれらの長さの文字列を抽出します。

lengths = ( max(len(s) for s in sublist) if sublist else 0 for sublist in sequences )
[ [ s for s in sublist if len(s) == l ] for l, sublist in zip(lengths, sequences) ]
-> [['aaa'], ['aaaa'], [], ['aaaaaa', 'cccccc']]

itertools.izipzipこの場合よりも好ましいです。

于 2013-04-05T15:16:37.827 に答える