在Python中从列表的列表中创建一个新列表并精确打印

3
我想在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

但是看起来我的逻辑是错的,需要一些帮助。

我知道这段代码在做什么,但我不明白它有什么问题。请详细说明一下。 - Pavel
@Pavel 他们的代码在这里创建了一个一维列表,但他们想要一个二维列表。 - Ashwini Chaudhary
在两个for循环之间添加grid2.append([]),并将grid2.append(...)替换为grid2[-1].append(...) - Ashwini Chaudhary
谢谢,它完美地工作了 @200 OK。也许你可以把它发布为答案,这样我就可以投票选它为正确的答案。 - oxvoxic
5个回答

1
你的print循环有误。按照现有写法,你会为grid2中的每一个元素都打印出grid2本身。你可以通过打印item来修复它。
for item in grid2: print item

如果你想保持1D列表,同时输出与问题中指定的完全相同的内容,你可以借鉴this answer中的一些代码,并使用",".join。请注意不要更改html标签。
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

1
你需要将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])

此外,我并不是说这是做这件事的最佳方式,我只是假设你正在学习这门语言,所以展示如何修复你的代码可能是最好的。 - woot

0

你的打印循环有误。

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

0

试试这个:

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)

0

你应该将 for item in grid2:print grid2 替换为 for item in grid2:print item(对于每个项目,你打印整个列表)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接