私はそのlist
ようなものを持っています:
L = [1,2,3,4,5,6,7,8]
L
これを次のような3つの部分に分割したいとします。
result = [[1,2,3],[4,5,6],[7,8]]
より高度なプログラミング方法を使用せずにこれを行うにはどうすればよいですか(単純なPythonメソッドのみを使用)?
私はそのlist
ようなものを持っています:
L = [1,2,3,4,5,6,7,8]
L
これを次のような3つの部分に分割したいとします。
result = [[1,2,3],[4,5,6],[7,8]]
より高度なプログラミング方法を使用せずにこれを行うにはどうすればよいですか(単純なPythonメソッドのみを使用)?
次のようなことを試すことができます:
In [13]: l = [1,2,3,4,5,6,7,8]
In [14]: result = [l[i:i+3] for i in xrange(0, len(l), 3)]
In [15]: result
Out[15]: [[1, 2, 3], [4, 5, 6], [7, 8]]
これにより、長さがのスライスがリストから引き出されます。n
ここで、n
は追加するi
数値であり、はのステップ値でもありますrange
。@Ericが指摘したように、これはリストを3つのチャンクに分割しますが、3つのチャンクには分割しません。それを3つのチャンクに分割するには、次のようにします。
In [21]: l = [1,2,3,4,5,6,7,8]
In [22]: chunk = int(round(len(l)/3.0))
In [23]: result = [l[i:i+chunk] for i in range(0,len(l),chunk)]
In [24]: result
Out[24]: [[1, 2, 3], [4, 5, 6], [7, 8]]
In [25]: l = [1,2,3,4,5]
In [26]: chunk = int(round(len(l)/3.0))
In [27]: result = [l[i:i+chunk] for i in range(0,len(l),chunk)]
In [28]: result
Out[28]: [[1, 2], [3, 4], [5]]
特定の制約があるように思われるので、これもfor
ループで記述することができます(ただし、実際には上記のものよりも多くの関数呼び出しがあります:)):
In [17]: result = []
In [18]: for i in xrange(0, len(l), 3):
....: result.append(l[i:i+3])
....:
....:
In [19]: result
Out[19]: [[1, 2, 3], [4, 5, 6], [7, 8]]
RocketDonkeyの答えは問題ないはずです。リスト内包表記のないものは次のとおりです。
l = [1,2,3,4,5,6,7,8]
result = {}
idx = 0
for i in l:
group = idx/3
if group not in result:
result[group] = []
result[group].append(i)
idx += 1
result.values()
>>> [[1, 2, 3], [4, 5, 6], [7, 8]]
enumerate()
手動のidx増分を削除するために使用できます。