查找困在列表中的字符数
Find number of characters trapped in a list
我的要求是最有效地找到列表中 '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
)?
我的方法会简单得多。只需计算每行中的零数,去掉两端的所有 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]
这是基于这样的逻辑:如果任何行中存在任何零,并且它不在任何一端,则应该用 'X' 括起来。
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]
我的要求是最有效地找到列表中 '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
)?
我的方法会简单得多。只需计算每行中的零数,去掉两端的所有 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]
这是基于这样的逻辑:如果任何行中存在任何零,并且它不在任何一端,则应该用 'X' 括起来。
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]