从给定长度和宽度的1d列表创建2d列表?

时间:2017-08-02 18:40:11

标签: python list 2d

如何使用给定的行和列从1D列表创建2D列表?

假设:

>>> book = get_book(42)
>>> book % 10**100
4779746919502753142323572698478137996323206967194197332998517828771427155582287891935067701239737874

它应该返回:

sample_list=[5, 2, 3, 4, 1, 6, 1, 6, 7, 2, 3]

row=2
cols=4

我不需要其他数字= 7,2,3。 我只想要一个包含用户提供的行和列的列表。 我的解决方案没有返回我想要的内容,

我的解决方案:

[[5, 2, 3, 4],[1, 6, 1, 6]]

返回:

def 1D_to_2D(sample_list, row, cols):
    return [sample_list[i:i+cols] for i in range(0, len(sample_list), rows)]

任何人都可以提供帮助吗?

3 个答案:

答案 0 :(得分:1)

只需使用range的列表推导和cols(不使用rows)步骤对列表进行切片,并使用外部切片限制项目数{{ 1}}:

rows

结果:

sample_list=[5, 2, 3, 4, 1, 6, 1, 6, 7, 2, 3]
rows=2
cols=4

result = [sample_list[x:x+cols] for x in range(0,len(sample_list),cols)][:rows]

答案 1 :(得分:1)

def D_to_2D(sample_list, rows, cols):
    return [sample_list[cols*i: cols*(i+1)] for i in range(rows)]

>>> D_to_2D([5, 2, 3, 4, 1, 6, 1, 6, 7, 2, 3], 2, 4)
[[5, 2, 3, 4], [1, 6, 1, 6]]

答案 2 :(得分:0)

f = lambda x, row, cols: [x[i:i+cols] for i in range(0, cols*row, cols)]
f(x, row, cols)