我正在研究的问题是以顺时针方向向内螺旋输出矩阵。我的代码,现在,这样做,但输出与预期略有不同。
matrix = [
['a','d','g','e','t','c'],
['p','k','h','w','e','f'],
['m','j','y','h','b','n'],
['e','o','j','n','g','y']
]
def spiralPrint(mat):
top = 0
left = 0
right = len(mat[0])-1
bot = len(mat)-1
result = []
while(True):
#TRAVERSE ACROSS TOP ROW
for j in range(left, right+1, 1):
result.append(mat[top][j])
#INC TOP INDEX SO WE DON'T REPEAT
top += 1
#EXIT CONDITION
if top > bot or left > right:
break
#TRAVERSE RIGHTMOST COLUMN
for i in range(top, bot+1, 1):
result.append(mat[i][right])
right -= 1
if top > bot or left > right:
break
#TRAVERSE BOTTOM ROW
for k in range(right, left-1, -1):
result.append(mat[bot][k])
bot -=1
if top > bot or left > right:
break
#TRAVERSE LEFT COLUMN
for p in range(bot, top-1, -1):
result.append(mat[p][left])
if top > bot or left > right:
break
left += 1
return result
print(spiralPrint(matrix))
输出应该如下:adgetcfnygnjoempk ...
我的输出是:[' a',' d',' g',' e',' t&# 39;,' c',' f',' n',' y',' g',&# 39; n',' j',' o',' e',' m',' p&#39 ;,'' h',' w',' e',' b',&#39 ; h',' y',' j']
如何输出没有引号和逗号的字符?
答案 0 :(得分:0)
不是返回result
,而是
return ''.join(result)
顾名思义,它将列表result
的内容连接成一个字符串。开头的空字符串表示在连续元素之间不会放置任何内容。有关详细信息,请参阅加入部分here。
您获得result
的列表而不是字符串,因为您反复append
这是一个列表方法。 (当然,您也将它初始化为空列表。)您可以连接并保留result
字符串,但使用列表然后连接在一起实际上是向字符串添加字符的推荐方法。所以你可能是意外地击中了Pythonic的方式。
答案 1 :(得分:0)
如果您希望它在一行中,您可以使用此代码
import numpy as np
''.join(np.array(matrix).flatten())
Out[101]: 'adgetcpkhwefmjyhbneojngy'
如果您想修复代码print(''.join(spiralPrint(matrix)))
答案 2 :(得分:0)
您可以使用加入(duplicate question)
>>> result = ['a', 'd', 'g']
>>> ''.join(result)
'adg'
>>> ' '.join(result)
'a d g'
答案 3 :(得分:0)
您可以将您的spiralPrint调用放入联接:
print(''.join(spiralPrint(matrix)))
这将为每个值创建一个新字符串。您还可以在前导字符串中添加分隔符以创建分隔输出。例如:
print('-'.join(spiralPrint(matrix)))
给出输出:a-d-g-e-t-c-f-n-y-g-n-j-o-e-m-p-k-h-w-e-b-h-y-j
答案 4 :(得分:0)
目前,您将结果作为列表返回,期望的是单个字符串,因此您只需将列表加入字符串即可。 不是返回结果,而是 return''。join(结果)
答案 5 :(得分:0)
您的功能正在返回列表。为了使它返回字符串,您需要加入列表。在您的情况下:return ''.join(result)
。
另外,根据Python PIP's coding guideline for Function Names:
函数名称应为小写,必要时将单词用下划线分隔,以提高可读性。
因此,您的功能应该是spiral_print()
而不是spiralPrint()