从列表列表中创建一个新列表,并用Python精确打印
我想从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)
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分钟内完美工作。。也许你可以把它作为答案贴出来,这样我就可以把它选为正确答案。另外,我并不是说这是最好的方法,我只是假设你正在学习这门语言,所以展示如何修复代码可能是最好的。