を私はnp.array
の使用に反対して、
はオブジェクト配列です。しかし、配列バージョンは、それがタプルではなく、リストでなければならない場合リシェイプ
In [240]: [np.array(x[0]+x[1]).reshape(-1,3).tolist() for x in l]
Out[240]:
[[[1.0, 0.0, 50.0], [2.0, 0.0, 50.0], [1.0, 1.9, 1.0]],
[[1.0, 0.0, 50.0], [2.0, 0.0, 50.0], [2.0, 1.9, 1.0]]]
が[tuple(n...
を追加して、簡単にリストを分割することができます。
私はいくつかのトリックをしています。 2番目のアイテムの長さは希望するsplit(3)と同じであるため、最初は連結しているだけで、あとで行うことを心配しています。そして、配列の形状変更に続いてtolist
が効果的に配列を分割します。
In [246]: np.reshape(x[0]+x[1],(-1,3))
Out[246]:
array([[ 1. , 0. , 50. ],
[ 2. , 0. , 50. ],
[ 1. , 1.9, 1. ]])
これは、アレイの往復はおそらく同等itertools
コードより遅い3
で均等にサブリストに分割することができることに依存します。
in-place
あなたはタプルのリストを持っているので、動作しません。これらのタプルを置き換えることはできますが、変更することはできません。彼らはリストだった場合は、このような分割にスプライス可能性:
In [248]: x
Out[248]: ([1, 0.0, 50.0, 2, 0.0, 50.0], [1, 1.9, 1])
In [249]: xl=list(x)
In [250]: xl[0:1] = [xl[0][:3],xl[0][3:]] # or the split of your choice
In [251]: xl
Out[251]: [[1, 0.0, 50.0], [2, 0.0, 50.0], [1, 1.9, 1]]
は、多くの場合、場所で物事を変更するよりも、新しいリストやタプルを作成する方が便利です。リストのリストをコピーするとは、同じポインタの新しいリストを作成することを意味します。
[tuple([i[t:t+3] for i in sub for t in range(0, len(i), 3)]) for sub in l]
:それは、リストの末尾をオフにスライスしても大丈夫なので
@Kasramvd's
islice
バージョンがに簡素化することができます