0

サブリストを含むリストが与えられた場合、指定された長さのサブリストを抽出したいと考えています。サブリストの長さが指定より短い場合は、すべて抽出します。明確にするために以下を参照してください

以下の例では、長さ = 2 のサブリストを抽出しています。長さがそれより大きい場合、サブリストの最初の 2 つの要素を抽出し、残りを無視します。入力

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

出力

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

私は現在次のようにやっています、それは動作しますが、簡単な方法があるかどうか疑問に思っています

B=[]

for el in A:
  l = []

  if len(el[1]) > 2:
     l.append(el[0])
     l.append(el[1][0:2])
     B.append(l)

  else:
     l.append(el[0])
     l.append(el[1][0:2])
     B.append(l)

print B
4

5 に答える 5

3

これにはリスト内包表記を利用できます。

In [71]: A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]],['G',[7,6,5,4]]]

In [72]: [[x[0],x[1][:2]] for x in A]
Out[72]: [['A', [1, 2]], ['D', [3, 4]], ['E', [6, 7]], ['F', [1]], ['G', [7, 6]]]
于 2013-02-01T04:05:42.997 に答える
1

活用できるmap機能

>>> a=[[1,[1,2,3]],[2,[1]],[3,[1,2]]]
>>> map(lambda v: [v[0],v[1][:2]], a)
[[1, [1, 2]], [2, [1]], [3, [1, 2]]]
于 2013-02-01T04:09:07.633 に答える
0

新しいリストを作成したくない場合は、単に

>>> A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]],['G',[7,6,5,4]]]
>>> for X in A:
    X[1]=X[1][:2]


>>> A
[['A', [1, 2]], ['D', [3, 4]], ['E', [6, 7]], ['F', [1]], ['G', [7, 6]]]
于 2013-02-01T05:25:02.033 に答える
0

のみを返すmapため、サブリストの各アイテムで使用します。'A'[:2]'A'

In [115]: A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]],['F',[1]],['G',[7,6,5,4]]]

In [116]: [map(lambda x:x[:2],x) for x in A]
Out[116]: [['A', [1, 2]], ['D', [3, 4]], ['E', [6, 7]], ['F', [1]], ['G', [7, 6]]]
于 2013-02-01T04:26:26.613 に答える