Python,连接垂直列表

sim*_*101 5 python string list

我有这个例如这个字符:

.....U......
L...L.######
.S....#.....
....L.......
Run Code Online (Sandbox Code Playgroud)

我存储在列表中

chars = ['.....U......', 'L...L.######', '.S....#.....', '....L.......']
Run Code Online (Sandbox Code Playgroud)

我用这个把它存放在字符中:

for x in range(0, N):
    g = input()
    chars.append(g)
Run Code Online (Sandbox Code Playgroud)

现在问题是我想将字母L之间的所有点转换为#但是垂直,所以像这样:

.....U......
L...L.######
.S..#.#.....
....L.......
Run Code Online (Sandbox Code Playgroud)

我现在已经尝试了几个小时,我想不出任何事情.非常感谢.

编辑:我用它来水平连接它们.它有效.

while y != N:
    modchars0 = list(chars[y])

    if modchars0.count('L') == 0:
        y += 1

    else:
        for k in range(0, M):
            if 'L' in modchars0[k]:
                start = k + 1
                break

        for l in range(M-1, 0, -1):
            if 'L' in modchars0[l]:
                end = l
                break

        for h in range(start, end):
            if 'L' in modchars0[h]:
                pass
            else:
                modchars0[h] = '#'

        modchars1 = modchars1.join(modchars0)
        chars[y] = modchars1
        y += 1
Run Code Online (Sandbox Code Playgroud)

Ash*_*ary 6

正如评论中提到的@ U2EF1,您可以使用列表的转置,zip(*chars)然后使用正则表达式,您可以将'L'之间的点转换为'#'.然后最后zip(*)新项目再次获得所需的输出:

>>> import re                                                             
>>> r = re.compile(r'(?<=L).*(?=L)')                     
>>> def rep(m):                                           
    return m.group().replace('.', '#')
... 
>>> zipped = (r.sub(rep, ''.join(x)) for x in zip(*chars))
>>> for x in zip(*zipped):
    print ''.join(x)
...     
.....U......
L...L.######
.S..#.#.....
....L.......
Run Code Online (Sandbox Code Playgroud)

  • @Roberto我没想到OP想要用`L#L`替换'LL`,我的解决方案也适用于像`L.SL`,`L .... L`这样的案例(OP说:*i想把字母L之间的所有点都变成#*).所以,我不认为这是一种矫枉过正.如果他们想要的只是将"LL"变为"L#L",那么肯定可以更好地完成. (2认同)