我的要求是最有效地找到列表中“X”之间的“0”数量。
如果您在 Python 中运行以下代码:
def answer(heights):
row = len(heights)
col = max(heights)
matrix = [['X' for j in range(i)] for i in heights]
for i in range(col):
rainWater = []
for j in range(row):
try:
rainWater.append(matrix[j][i])
except IndexError:
rainWater.append('0')
print rainWater
return matrix
answer([1, 6, 5, 3, 2, 10, 4, 2, 6])
输出:
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X']
['0', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X']
['0', 'X', 'X', 'X', '0', 'X', 'X', '0', 'X']
['0', 'X', 'X', '0', '0', 'X', 'X', '0', 'X']
['0', 'X', 'X', '0', '0', 'X', '0', '0', 'X']
['0', 'X', '0', '0', '0', 'X', '0', '0', 'X']
['0', '0', '0', '0', '0', 'X', '0', '0', '0']
['0', '0', '0', '0', '0', 'X', '0', '0', '0']
['0', '0', '0', '0', '0', 'X', '0', '0', '0']
['0', '0', '0', '0', '0', 'X', '0', '0', '0']
我需要在 Python 中最有效地找到夹在两个“X”之间的“O”。例如
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X']
['0', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X']
['0', 'X', 'X', 'X', '0', 'X', 'X', '0', 'X'] --> 2 '0' are trapped
['0', 'X', 'X', '0', '0', 'X', 'X', '0', 'X'] --> 3 '0' are trapped
['0', 'X', 'X', '0', '0', 'X', '0', '0', 'X'] --> 4 '0' are trapped
谁能帮我解决这个 Python 问题?
请您参考如下方法:
您可以将每一行转换为字符串,然后应用正则表达式来查找包含的 0 个字符 1:
import re
matrix = [['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['0', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['0', 'X', 'X', 'X', '0', 'X', 'X', '0', 'X'],
['0', 'X', 'X', '0', '0', 'X', 'X', '0', 'X'],
['0', 'X', 'X', '0', '0', 'X', '0', '0', 'X']]
pattern = re.compile(r'(?=X(0+)X)')
for row in matrix:
print len(''.join(pattern.findall(''.join(row))))
输出
0 0 2 3 4
1 根据您的问题,我在这里使用了 0(零)。但也许它应该是 O(大写 o)?
