【问题标题】:Split a list with n*n elements into n lists with n elements in every list [duplicate]将具有n * n个元素的列表拆分为n个列表,每个列表中都有n个元素[重复]
【发布时间】:2018-03-11 10:46:23
【问题描述】:

我正在尝试提出一个函数,该函数接受输入 x 并将具有元素数量 x*x 的大列表拆分为 x 个较小的列表,每个列表中都有 x 个元素 例如:

big_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

def split_list (x):
big_list = pairs (x)
small_list = [big_list[0:x] for x in range (x)]

我的输出必须是:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] 

但我不明白,你有什么建议?

【问题讨论】:

标签: python python-3.x list


【解决方案1】:

这里有一个解决方案:

def split_list(big_list, x):
    list_size = len(big_list)
    splits = int(list_size / x)

    return [big_list[k*x:k*x+x] for k in range(splits)]

big_list = [i+1 for i in range(16)]
print(big_list)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

small_list = split_list(big_list, 4)
print(small_list)
# [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]


small_list = split_list(big_list, 2)
print(small_list)
# [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12], [13, 14], [15, 16]]

small_list = split_list(big_list, 3)
print(small_list)
# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]

【讨论】:

    【解决方案2】:

    为什么不使用numpy

    >>> import numpy as np
    >>> big_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
    >>> a=np.array(big_list)
    >>> a
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16])
    >>> n=int(len(big_list)**0.5)
    >>> a.reshape(n,n)
    array([[ 1,  2,  3,  4],
           [ 5,  6,  7,  8],
           [ 9, 10, 11, 12],
           [13, 14, 15, 16]])
    

    或者只是:

    >>> big_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
    >>> n=int(len(big_list)**0.5)
    >>> new_list=[big_list[i:i+n] for i in range(0, len(big_list), n)]
    >>> new_list
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
    

    【讨论】:

      【解决方案3】:

      我一直使用这个代码。

      def chunkify(items, chunk_len):
          return [items[i:i+chunk_len] for i in range(0,len(items),chunk_len)]
      

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        big_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
        
        def split_list (x):
           return [big_list[i:i+x] for i in range(0, len(big_list), x)]
        
        print(split_list(4))
        

        输出:

        [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
        

        【讨论】:

          【解决方案5】:

          首先,您想使用平方根来获取大小,因此对于大小为n 的列表,您将拥有一个带有m = n ** 0.5m x m 矩阵。让我们首先定义你的函数:

          def square(array):
              n = len(array)
              m = int(n ** 0.5)
          

          由于列表大小必须是整数,我们必须在结果上调用int。接下来,我们要从0开始,每次将i计数到nm,取m元素从i开始:

          def square(array):
              n = len(array)
              m = int(n ** 0.5)
              result = []
              for i in range(0, n, m):
                  result.append(array[i:i + m])
              return result
          

          就是这样。

          或者,s=lambda a:(lambda m:[a[i*m:i*m+m]for i in range(m)])(int(len(a)**.5))

          【讨论】:

            猜你喜欢
            • 2018-05-27
            • 1970-01-01
            • 2015-01-12
            • 1970-01-01
            • 1970-01-01
            • 2020-11-05
            • 2020-01-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多