Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何给二维列表编号?_Python_Arrays_List - Fatal编程技术网

Python 如何给二维列表编号?

Python 如何给二维列表编号?,python,arrays,list,Python,Arrays,List,我把这些列表放在一个我正试图编号的列表中。我还有两个变量,行和列,作为输入 lst = row*[column*[0]] 这使得列表中的列表用零填充,因此,如果行=6,列=10,则看起来像: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0,

我把这些列表放在一个我正试图编号的列表中。我还有两个变量,行和列,作为输入

lst = row*[column*[0]]
这使得列表中的列表用零填充,因此,如果行=6,列=10,则看起来像:

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],    
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],   
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],   
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 
如何更改它,使其看起来像这样:

[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],   
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20],     
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30],    
[31, 32, 33, 34, 35, 36, 37, 38, 39, 40],     
[41, 42, 43, 44, 45, 46, 47, 48, 49, 50],     
[51, 52, 53, 54, 55, 56, 57, 58, 59, 60]]

谢谢大家!

快速而肮脏的解决方案是:

lst = []
for r in range(row):
    lst.append([])
    for c in range(column):
        lst[r].append(c + r * column)
这可以使用numpy和重塑更干净地实现,如:

lst = numpy.arange(row * column).reshape(row, column).tolist()
试试这个:

l = []
for i in range(0, 6):
    row = []
    for j in range(1,11):
        row.append(i*10+j)
    l.append(row)
l
>>>[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
   [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
   [21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
   [31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
   [41, 42, 43, 44, 45, 46, 47, 48, 49, 50],
   [51, 52, 53, 54, 55, 56, 57, 58, 59, 60]]

为什么不使用以下列表理解:

lst = [[(i+j*column)+1 for i in range(column)] for j in range(row)]

您可以使用
zip
range
获取此信息

list(zip(*[iter(range(1, row*column+1))]*column))
这将产生一个元组列表,但如果需要列表列表,只需将
映射到
列表
zip

list(map(list, zip(*[iter(range(1, row*column+1))]*column)))
结果:


[[0,1,2,3,4,5,6,7,8,9],[10,11,12,13,14,15,16,17,18,19],[20,21,22,23,24,25,26,27,28,29],[30,31,32,33,34,35,36,37,38,39],[40,41,42,43,44,45,47,48,49],[50,51,52,54,55,56,57,58,59]
我认为这是最“蟒蛇”的方式:

输出:

[[1,2,3,4,5,6,7,8,9,10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
[31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
[41, 42, 43, 44, 45, 46, 47, 48, 49, 50],
[51, 52, 53, 54, 55, 56, 57, 58, 59, 60]]

<>代码> < P> >我想了解这一点是认识到你正在生成一个列表列表,而不是2D数组。

此外,考虑到你的经验水平,我认为程序方法可能是你的一个良好开端

# Your given information
row = 6
col = 10

# Initialize an empty list of lists
lst = []

# Continuously append lists by converting range() objects
i = 1
while i <= (row * col):
  next_i = i + col
  arr.append(list(range(i, next_i)))
  i = i + next_i
结果是每行的第一列都更改为999。这是因为当您将由
[column*[0]]
创建的
列表
相乘时,实际情况是得到了相同
列表
实例。所以当你提到其中一个,你就用这种方式提到所有的。小心这种“列表乘法”。

这也适用:

lst = [list(range(1+i*column, 1+(i+1)*column)) for i in range(row)]
输出:

print (lst)
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60]]
说明:

print (lst)
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60]]
  • 我们正在构建一个外部列表,其中每个元素都是
    int
    的(内部)列表
  • 列表理解构建外部列表
  • 循环的
    前面的表达式是
    列表(范围(1+i*列,1+(i+1)*列))
    ,表示此外部列表的每个元素。此元素是
    int
    的列表,首先使用
    range(1+i*列,1+(i+1)*列)
    将其构造为范围对象。然后将此返回的范围对象传递到
    list()
    ,以将其转换为列表
    请注意,表达式
    范围(1+i*列,1+(i+1)*列)
    直观的,因为它反映了这样一个事实,即在
    i
    第行中,值将“范围”从
    (1+i*列)到1+(i+1)*列
    。例如,在6x10的情况下,当
    i
    =2时,相应行的值将“范围”从
    1+2*10
    1+(2+1)*10

    非常奇怪,但仍然很有趣。我自己的一个问题的答案非常有用,有时可以修改得非常漂亮。我就这么做了here@AlexanderReynolds这不仅是一种有趣/古怪的方法,而且比列表公司的备选方案快5倍左右。看,比较是错误的,每一个都会产生完全不同的输出(尽管更正后的列表比较仍然较慢)我刚刚意识到,为什么你的答案不会产生OP想要的结果oops不是你的答案你的行和列都倒过来了,参见下面martineau的答案。比没有嵌套for循环的更具Python风格?@fountainhead:是的,虽然可以说不如你的“直观”,但它仍然非常高效且可读。
    print (lst)
    [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60]]