用Python创建一个二维数组

时间:2015-11-13 06:32:01

标签: python arrays

你如何制作2d网格?接下来,如何用其他东西替换该网格中的随机元素?

我试过了:

def introgrid( ):
     anyrow = 0
     print(columnrow)
     grid = [symbol for r in range(column)]
     grid2 = (grid[0]+"  ")*15
     for i in range(row):
         print(grid2+str(anyrow))
         anyrow+=1

symbol= "."
columnn= 15
row= 12
rowcount = 0
columnrow = "0  1  2  3  4  5  6  7  8  9  10 11 12 13 14"

这会生成一个网格,但它不允许您随机更改它的元素。帮助!

3 个答案:

答案 0 :(得分:2)

要制作2D数组,您可以编写

width = 10
height = 5
grid= [[0 for x in range(width)] for x in range(height)]

要访问网格中的项目,只需输入grid[x][x],其中x是您的位置

修改

我发现其他答案很复杂。这实际上给你一个网格。这只是你如何呈现数据的问题。

打印 2D数组作为网格表示,您只需遍历数组

for item in grid:
   row = ''
   for subitem in item:
       row += str(subitem) + ' '
   print row

更改数组中的每个值,您可以执行以下操作:

for index, item in enumerate(grid):
    for subindex, subitem in enumerate(item):
        grid[index][subindex] = random.randint(0, 10)

答案 1 :(得分:0)

通常,我看到网格在列表中表示为列表。即如果你想制作以下网格:

A0 B0 C0
A1 B1 C1
A2 B2 C2

你会像这样代表它(请记住python中的数组/列表是zero-indexed

[[A0, B0, C0],
[A1, B1, C1],
[A2, B2, C2]]

这类事情当然有多种变化。我们想到的一个例子是,您可以将每一行存储为对象的单独编号属性。由于您在示例中使用了列表(数组),因此我假设您要使用基于列表的表示。

我知道的变量如下:column是网格x轴上的列数,而y轴上的行数是row。通常,最好使变量名尽可能清晰,因此我将改为使用num_rowsnum_cols

如果要创建网格,首先要实例化行,然后将列添加到每一行。您可以使用列表推导,但这些可能更难以读取for循环。使用for循环,你可以像这样制作一个网格:

SYMBOL = '.' # it is convention in python to name constants in ALL CAPS
grid = []

for x in range(num_rows):
    grid.append([])
    for y in range(num_cols):
        grid[x].append(SYMBOL)

要访问随机元素,只需使用python的内置random number generator

from random import randint

row = randint(0,num_rows-1)
col = randint(0,num_cols-1)

value = 'whatever you want to put in the random cell'

grid[row][col] = value

答案 2 :(得分:0)

您可以使用.join()类的string方法连接每行的一些随机符号,然后打印而不是点。可以使用函数random.choice(list)获得随机符号,该函数随机返回进入list的元素。这是您的案例的应用程序,其中list是可用的大写字符和数字。您可以使用它来选择不同的随机符号。

import string
import random

% Grid dimensions and column numbers 
cols = 15
rows = 12
column = ' '.join(str(i).zfill(2) for i in range(cols))

% Turn the basic symbol into a string
basic_symbol= '.'
grid = '  '.join(basic_symbol for i in range(cols))

% Display the grid
print(column)
for i in range(rows):
    randgrid = '  '.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(cols))
    print randgrid + ' ' + str(i).zfill(2)