0

次の入力リストがあります

A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]]]

長さが 2 のサブリストが必要です。上記の例では、[A,[1,2,3]]、[F,[1]] などを削除します。新しいリストを作成し、そのすべてのサブリストを追加します。長さ ==2。不要なサブリストである A から直接削除できれば理想的です

4

4 に答える 4

2

こんなはずじゃないの?

A = [x for x in A if len(x[1]) == 2]

あるいは

A = [[a, b] for a, b in A if len(b) == 2]
于 2013-01-31T00:38:02.623 に答える
1

新しいフィルタリングされたリストを作成する方が簡単です。はスライス割り当てです。これは、同じリストへの他の参照が更新を参照できるようA[:] = ...に、新しいリストのコンテンツがコピーされて戻されることを意味します。AのIDを保持する必要がない場合はAA = ...

>>> A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]]]
>>> A[:] = [x for x in A if len(x[1]) == 2]
>>> A
[['D', [3, 4]], ['E', [6, 7]]]

アイテムを削除するたびに残りのアイテムをリストの下に移動する必要があるため、通常、その場で削除するのは非効率的です。また、繰り返し処理するリストから削除するときに、要素をスキップしないように注意する必要があります。

于 2013-01-31T00:53:17.687 に答える
1

フィルターを使用したい場合があります。

filter(lambda x: len(x[1]) == 2, A)

これは、各要素 (リスト) に 2 つの要素があり、2 番目の要素がリストであることを前提としています。この内部リストにちょうど 2 つの要素を持つ要素をフィルター処理したいとします。

フィルターの詳細:

filter(...) filter(関数またはなし、シーケンス) -> リスト、タプル、または文字列

Return those items of sequence for which function(item) is true.


リスト内包表記を使用して同じことが実現できます。

[x for x in A if len(x[1]) == 2]

于 2013-01-31T00:38:16.290 に答える
0
A = [x if len(x)==2 for x in A]

参考までに、E リストと F リストには閉じ括弧がありませんが、これは単なるコピー/貼り付けエラーまたは同様のものだと思います。

于 2013-01-31T00:36:34.783 に答える