2014-10-28 2 views
0

Что у меня в данный момент представляет собой сетку, которая выглядит следующим образом:Поиск строки в строку в списке питона

--d-- 
--d-- 
-d--- 
---d- 
-d-d- 

Я пытаюсь найти местоположение каждого «D» внутри сетки. Я могу сделать это, используя простой цикл, но я столкнулся с проблемой, когда я пытаюсь найти два 'д' в одной строке, он находит только первый, а не второй. Однако, поскольку он находится в формате списка (не на 100%, если я могу изменить его из этого формата), метод .find() не будет работать. Не уверен, есть ли простой способ решить эту проблему или если мне нужно полностью пересмотреть мой подход, но любая помощь будет полезна.

код для поиска, что у меня есть на данный момент (без попытки поиска нескольких вхождений, как он сломал все)

Предположим доска является сетка упоминалось ранее

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

ответ

1

Если у вас есть совет, как так

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

Output (форматированный в [row, column])

[0,2] 
[1,2] 
[2,1] 
[3,3] 
[4,1] 
[4,3] 

Это может быть превращена в функцию слишком

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]] 
+0

Awesome! Это сработало, спасибо! –

0

Вы должны перечислить как строки, так и колонны. Использование списка понимание это будет выглядеть следующим образом:

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)] 
Смежные вопросы