0

lリストをリストのリストに再配置したいと思います。nここnで、は列の数です。

例えば、

l = [1,2,3,4,5,6,7,8,9,10]
n = 4
==> [[1,5,9],[2,6,10],[3,7][4,8]]

誰かがアルゴリズムを手伝ってくれませんか?利用可能なPythonの素晴らしさを自由に使用してください。これにぴったりのクールなメカニズムがあると確信しています。私はそれを考えることができません。

PSサンプルリストはたまたま1から始まる番号で並べられていました。それは私の実際のシナリオではありません。

4

4 に答える 4

6

実際、Python にはこれに対する優れたメカニズムがあります。最後の引数がステップ サイズである 3 つの引数形式のスライシングです。

>>> l = [1,2,3,4,5,6,7,8,9,10]
>>> n = 4
>>> [l[i::n] for i in range(n)]
[[1, 5, 9], [2, 6, 10], [3, 7], [4, 8]]
于 2012-10-03T09:35:50.837 に答える
1
l = [1,2,3,4,5,6,7,8,9,10]
n = 4

def f(l,n):
    A = []
    [A.append([]) for i in xrange(n)] 
    [ A [(i - 1) % n].append(i) for i in l]
    return A

print f(l,n)

[[1, 5, 9], [2, 6, 10], [3, 7], [4, 8]]

于 2012-10-03T09:26:48.933 に答える
1

次の関数は、達成したいことを行います。

def rearrange(seq,n):
    return [[v for i,v in enumerate(seq[x:]) if i%n==0] for x in xrange(len(seq))][:n]
于 2012-10-03T09:26:43.753 に答える
0

Python を書くことは、コード ゴルフのゲームではありません。読みやすくするために複数の行を使用することを恐れないでください。

l = [1,2,3,4,5,6,7,8]

def split_into_columns(input_list, num_of_cols=3):
    retval = [ [] for _ in xrange(num_of_cols)]      # build 3 columns
    for i in xrange(len(input_list)):                # iterate through original list
        retval[i%num_of_cols].append(input_list[i])  # place in the "modulo 3" column
    return retval

    # here's a compressed, less readable version of that for-loop
    #[retval[i%3].append(input_list[i]) for i in xrange(len(input_list))]
    #return retval

print split_into_columns(l, 3)
于 2012-10-03T09:46:12.347 に答える