水平翻转类似矩阵的字符串

Flipping a matrix-like string horizontally

此函数的目标是水平翻转类似矩阵的字符串。

例如,字符串:'100010001' 具有 2 行和 3 列,如下所示:

1 0 0
0 1 0
0 0 1

但是翻转后应该是这样的:

0 0 1
0 1 0
1 0 0

所以该函数会return以下输出: '001010100'

注意,我不能使用列表或数组。只有字符串。

我相信,我编写的当前代码应该可以工作,但是它 return 是一个空字符串。

def flip_horizontal(image, rows, column):

   horizontal_image = ''
   for i in range(rows):

       #This should slice the image string, and map image(the last element in the 
       #column : to the first element of the column) onto horizontal_image.
       #this will repeat for the given amount of rows

       horizontal_image = horizontal_image + image[(i+1)*column-1:i*column]
    
   return horizontal_image

这 return 也是一个空字符串。知道问题出在哪里吗?

使用[::-1]反转图像的每一行。

def flip(im, w):
    return ''.join(im[i:i+w][::-1] for i in range(0, len(im), w))

>>> im = '100010001'
>>> flip(im, 3)
'001010100'

范围函数可用于将您的字符串分成代表行的步骤。在遍历字符串时,您可以使用 [::-1] 反转每一行以实现水平翻转。

string = '100010001'
output = ''
prev = 0

# Iterate through string in steps of 3
for i in range(3, len(string) + 1, 3):

  # Isolate and reverse row of string
  row = string[prev:i]
  row = row[::-1]

  output = output + row
  prev = i

输入:

'100
 010
 001'

输出:

'001
 010
 100'