如何从python中的矩阵连接一串字符?

时间:2016-10-18 00:03:14

标签: python python-2.7

我正在研究的问题是以顺时针方向向内螺旋输出矩阵。我的代码,现在,这样做,但输出与预期略有不同。

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

如何输出没有引号和逗号的字符?

6 个答案:

答案 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()