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]]