2016-04-21 84 views
2
import random 

rows = 3 
cols = 3 
virus = [0,0,0,0,0,1,2] 
virus_level = random.choice(virus) 
first_gen = [] 
row =[] 
for rownum in range(rows): 
    for colnum in range(cols): 
     virus_level = random.choice(virus) 
     row.append(virus_level) 
    first_gen.append(row) 

我需要使用列表中的随机数创建一个二维列表病毒。这是我迄今为止,数字不是随机的顺序,列表打印出9乘3,而不是3乘3。一些指向正确方向的指针会很好。使用随机数在Python中创建二维列表。

+0

你可能需要重新row'''到[]'你追加到'first_gen' – Julien

+0

你们是不是要'后一个reshape' 1D列表为2D名单?病毒列表有7个数字,而3x3列表则有12个数字。 – roadrunner66

+0

row = []肯定应该在第一个for循环中。 – roadrunner66

回答

0

你需要在每个循环复位row

将您的代码片段保持原样,如果您只需将row =[]一行放入外部循环中,那应该会给您正确的结果。

import random 

rows = 3 
cols = 3 
virus = [0,0,0,0,0,1,2] 
virus_level = random.choice(virus) 
first_gen = [] 
for rownum in range(rows): 
    row = []  
    for colnum in range(cols): 
     virus_level = random.choice(virus) 
     row.append(virus_level) 
    first_gen.append(row) 

print first_gen # [[2, 0, 0], [0, 0, 0], [1, 0, 0]] 
+0

谢谢!正是我需要的 –

0

你分配row[]应该是最外层的循环中,像这样:

import random 

rows = 3 
cols = 3 
virus = [0,0,0,0,0,1,2] 
virus_level = random.choice(virus) 
first_gen = [] 
for rownum in range(rows): 
    row = [] 
    for colnum in range(cols): 
     virus_level = random.choice(virus) 
     row.append(virus_level) 
    first_gen.append(row) 

不过,我更喜欢使用列表理解这些各种各样的事情。这里是一个另类:

from pprint import pprint 
import random 

rows = 3 
cols = 3 
virus = [0,0,0,0,0,1,2] 

first_gen = [[random.choice(virus) for _ in range(rows)] for _ in range(cols)] 
pprint (first_gen) 
0

该做的伎俩:

>>> import random 
>>> rows=3 
>>> cols=3 
>>> virus=[0,0,0,0,0,1,2] 
>>> [[random.choice(virus) for r in range(rows)] for c in range(cols)] 
[[0, 2, 2], [0, 0, 0], [0, 0, 0]]