在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)]