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

时间:2014-10-28 22:51:49

标签: python string list python-2.7 find

目前我得到的是一个网格,看起来像这样:

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

我正在尝试找到网格中每个'd'的位置。我能够使用一个简单的for循环来做到这一点,但是当我尝试在同一行找到两个's'时遇到问题,它只找到第一个而不是第二个。但是,由于它是以列表格式(不是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)]

2 个答案:

答案 0 :(得分: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]]

答案 1 :(得分: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)]