我的要求是找到列表中'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
有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
您可以将每一行转换为字符串,然后应用正则表达式来查找包含的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
)?
答案 1 :(得分:3)
我的方法会简单得多。只计算每一行中的零数量,删除任何一端的所有0
<强>实施强>
[''.join(row).strip('0').count('0') for row in matrix]
<强>输出强>
>>> 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']]
>>> [''.join(row).strip('0').count('0') for row in matrix]
[0, 0, 2, 3, 4]
这是基于这样的逻辑:如果任何行中存在任何零,并且它不在任何一端,则应该用&#39; X&#39;。
包围。答案 2 :(得分:1)
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']]
[each[1:-1].count('0') for each in matrix]