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)
正如评论中提到的@ 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)
| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |