从列表列表创建字符串,然后 return 它与 #'s 接壤字符串的边缘

Create string from list of lists then return it with #'s bordering the edges of the string

我在编写此函数时遇到问题,该函数必须将列表的列表转换为字符串,然后用边框将其包围。它还必须替换最右边包含字符串 'A" with ' 的行中的 #。 .这是输入和预期输出

Input: [['.',   '.',    '.',    'e'],
        ['A',   'A',    '.',    'e'],
        ['.',   '.',    '.',    'e'],
        ['.',   'X',    'X',    'X'],
        ['.',   '.',    '.',    '.'],
        ['.',   'y',    'Z',    'Z']]

Output: ######
        #...e#
        #AA.e.
        #...e#
        #.XXX#
        #....#
        #.yZZ#
        ######

如您所见,带 A 的行末尾有句点而不是“#”,因为这是函数的条件之一。它必须以某种方式识别哪个列表有 1 个或多个 A,然后用句点替换末尾的#。这是我到目前为止的代码感谢任何帮助

def border_around(lst):
    new_value = ''.join(str(r) for v in lst for r in v)
    maxlen = max(len(s) for s in new_value)
    colwidth = maxlen + 2
    return '#' + '.'*colwidth
def border_around(lst):
    ncols = max(len(row) for row in lst)+2
    first = '#' * ncols + '\n'
    last = '\n' + '#' * ncols
    return first + '\n'.join('#'+''.join(row)+('#' if 'A' not in row else '.') for row in lst) + last

考虑到A的规则,可以改成:

return first + '\n'.join('#'+''.join(row) + '#' for row in lst) + last

至:

return first + '\n'.join('#'+''.join(row) + ('#' if 'A' in row else '') for row in lst) + last