2014-10-28 137 views
0

什麼我在此刻得到的是一個網格,它看起來像這樣:查找字符串中的字符串列表中的蟒蛇

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

我試圖找到每個「d」的位置在網格內。我可以用一個簡單的for循環來做到這一點,但是當我嘗試在同一行上找到兩個'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)) 

輸出(格式爲[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

真棒!這工作,非常感謝! – 2014-10-28 23:08:58

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