Skip to main content
 首页 » 编程设计

python之查找困在列表中的字符数

2025年05月04日12cmt

我的要求是最有效地找到列表中“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)?