在python列表中的字符串中查找字符串

在python列表中的字符串中查找字符串,python,string,list,python-2.7,find,Python,String,List,Python 2.7,Find,我现在得到的是一个网格,它看起来像这样: --d-- --d-- -d--- ---d- -d-d- grid = """--d-- --d-- -d--- ---d- -d-d-""".splitlines() print [ (i, [j for j, ch in enumerate(row) if ch == 'd']) for i, row in enumerate(grid)] # [(0, [2]), (1, [2]), (2, [1]), (3, [3]), (4,

我现在得到的是一个网格,它看起来像这样:

--d--
--d--
-d---
---d-
-d-d-
grid = """--d--
--d--
-d---
---d-
-d-d-""".splitlines()

print [ (i, [j for j, ch in enumerate(row) if ch == 'd']) 
    for i, row in enumerate(grid)]
# [(0, [2]), (1, [2]), (2, [1]), (3, [3]), (4, [1, 3])]
我试图找到网格中每个“d”的位置。我可以使用一个简单的for循环来实现这一点,但是当我试图在同一行上找到两个d时,遇到了一个问题,它只找到了第一个,而没有找到第二个。但是,由于它是列表格式(无法100%确定是否可以将其更改为该格式),因此.find()方法将无法工作。我不确定是否有一个简单的方法来解决这个问题,或者我是否需要完全重新思考我的方法,但是任何帮助都是有用的

我现在得到的搜索代码(没有尝试搜索多个事件,因为它破坏了一切)

假设board是前面提到的网格

dirtyCellLocations = []
for idx, row in enumerate(board):
    for letter in row:
        if letter == 'd':
            dirtyLocation = (idx, row.index('d'))
            dirtyCellLocations.append(dirtyLocation)
如果你对网格的形成方式感兴趣的话

board = [[j for j in raw_input().strip()] for i in range(5)]

如果你有这样的董事会

board = ['--d--',
         '--d--',
         '-d---',
         '---d-',
         '-d-d-']
你可以

for row in range(len(board)):
    for col, value in enumerate(board[row]):
        if value == 'd':
            print('[{},{}]'.format(row,col))
输出(格式为
[行、列]

这也可以转化为一个函数

def findIndices(board, x):
    l = []
    for row in range(len(board)):
        for col, value in enumerate(board[row]):
        if value == x:
            l.append([row,col])
    return l

>>> findIndices(board, 'd')
[[0, 2], [1, 2], [2, 1], [3, 3], [4, 1], [4, 3]]

您需要同时枚举行和列。使用列表理解,它将如下所示:

--d--
--d--
-d---
---d-
-d-d-
grid = """--d--
--d--
-d---
---d-
-d-d-""".splitlines()

print [ (i, [j for j, ch in enumerate(row) if ch == 'd']) 
    for i, row in enumerate(grid)]
# [(0, [2]), (1, [2]), (2, [1]), (3, [3]), (4, [1, 3])]
但这有点难看,所以你可以将内心的理解提取到一个函数中:

def get_dirties(row):
    return [i for i, ch in enumerate(row) if ch == 'd']

all_dirties = [(i, get_dirties(row)) for row in enumerate(grid)]