从列表列表中创建一个新列表,并用Python精确打印

从列表列表中创建一个新列表,并用Python精确打印,python,list,Python,List,我想从Python中的列表列表创建一个列表。这是我的方法 grid=[[0,1,1], \ [1,0,1], \ [1,1,1], \ [1,0,0]] grid2=[] for x in range(0,len(grid)): for y in range(0,len(grid[x])): if grid[x][y]==0: grid2.append(22)

我想从Python中的列表列表创建一个列表。这是我的方法

    grid=[[0,1,1], \
          [1,0,1], \
          [1,1,1], \
          [1,0,0]]
    grid2=[]
    for x in range(0,len(grid)):
     for y in range(0,len(grid[x])):
       if grid[x][y]==0:
         grid2.append(22)
       if grid[x][y]==1:
         grid2.append(44)

    for item in grid2:print grid2
我期望的输出在grid2中,列表如下所示:

22,44,44
44,22,44
44,44,44
44,22,22

但我的逻辑似乎是错误的。需要一些帮助

您的
打印
循环出错。如前所述,您可以为
grid2
中的每个项目完整打印
grid2
。您可以通过打印
来修复它

for item in grid2: print item
如果您想打印问题中指定的确切输出,同时保留1D列表,您可以从中借用一些代码并使用
“,”。加入

def chunks(l, n):
    """ Yield successive n-sized chunks from l.
    """
    for i in xrange(0, len(l), n):
        yield l[i:i+n]


for item in chunks(grid2, 3): print ",".join(str(x) for x in item)
输出:

22,44,44
44,22,44
44,44,44
44,22,22

你的打印循环是错误的

for item in grid2:
    print (item)
使用numpy可以获得更好的解决方案:

a = np.array([[0,1,1],
      [1,0,1],
      [1,1,1],
      [1,0,0]])
np.where(a == 0, 22, 44)
Out[23]: 
array([[22, 44, 44],
       [44, 22, 44],
       [44, 44, 44],
       [44, 22, 22]])

您需要将grid2视为列表列表。至少我认为你是想这么做

grid=[[0,1,1], \
      [1,0,1], \
      [1,1,1], \
      [1,0,0]]
grid2=[]
for x in range(0,len(grid)):
    grid2.append([])
    for y in range(0,len(grid[x])):
        if grid[x][y]==0:
           grid2[x].append(22)
        if grid[x][y]==1:
           grid2[x].append(44)

for item in grid2:
    print ','.join([str(x) for x in item])

您应该将grid2:print grid2中项目的
替换为grid2中项目的
:print item
(对于打印整个列表的每个项目)

尝试以下操作:

grid=[[0,1,1], \
  [1,0,1], \
  [1,1,1], \
  [1,0,0]]

grid2=[",".join(["44" if flag else "22" for flag in row]) for row in grid]
print "\n".join(grid2)

我知道代码的作用,但我不明白它有什么问题。请详细说明。@Pavel他们的代码在这里创建了一个一维列表,他们想要二维列表。在两个for循环之间添加
grid2。附加([])
,并替换
grid2。附加(…)
,使用
grid2[-1]。附加(…)
。谢谢。。它可以在200分钟内完美工作。。也许你可以把它作为答案贴出来,这样我就可以把它选为正确答案。另外,我并不是说这是最好的方法,我只是假设你正在学习这门语言,所以展示如何修复代码可能是最好的。