繁体   English   中英

如何查找每个字符串是否出现在给定列表中?

[英]How can I find whether every string appears in the given list or not?

所以我得到了一个这样的列表s = ['.GGGGR','RGGRRG','RR...R','GR.GG.','.G.RRG','R.GGRG']我我应该让我的主要 function contains_R(grid)返回 R 如果 R 连续出现四次,如 RRGGGG 或 G 连续出现四次,如 RRGGGG 或 G。

这是我的代码:

def portillo(board2):
    s = []
    for i in board2:
        s.append(list(i))
    return s
def rows(grid):
    r = list()
    for row in portillo(grid):
        r.append("".join(row))
    return r
def columns(grid):
    e = ''
    results = []
    for j in range(len(grid)):
        for i in range(len(grid)):
            e = e+grid[i][j]
        results.append(e)
        e = ''
    return results
def diagonal1(grid):
      grid = portillo(grid)
      results = []
      for i in range(len(grid)):
        tmp1=""
        tmp2=""
        for j in range(0,len(grid)-i):
            tmp1+=grid[i+j][j]
            tmp2+=grid[j][i+j]
        results.append(tmp1)
        results.append(tmp2)
      return list(results)
print(diagonal1(['GRRG','.GGR','GRGR','RGRG']))
def diagonal2(grid):
    results = []
    n=len(grid)
    for i in range(n):
        tmp1=""
        tmp2=""
        for j in range(i+1):
            tmp1+=grid[i-j][j]
            tmp2+=grid[n-1-j][n-1-i+j]
        results.append(tmp1)
        results.append(tmp2)
    return list(results)
def contains_R(grid):
    if 'RRRR' in diagonal1(grid):
        return 'R'
    if 'RRRR' in diagonal2(grid):
        return 'R'
    if 'RRRR' in rows(grid):
        return 'R'
    if 'RRRR' in columns(grid):
        return 'R'
    if 'GGGG' in diagonal1(grid):
        return 'G'
    if 'GGGG' in diagonal2(grid):
        return 'G'
    if 'GGGG' in rows(grid):
        return 'G'
    if 'GGGG' in columns(grid):
        return 'G'
    else:
        return '-'

我的代码大部分时间都可以工作,但是当G 和 S 都出现s = ['GGGG','.RGR','RRRR','RGRG']时,output 返回R而不是-

另一个问题是,当输入大于 4*4 板时,例如s = ['.GGGGR','RGGRRG','RR...R','GR.GG.','.G.RRG','R.GGRG'] ,

即使G在一行中明显出现了四次......代码返回'-'而不是G

当我的输入是`

                  ['.GSSSR',
                   'RGGRRG',
                   'RR.G.R',
                   'GR.GG.',
                   '.G.RRG',
                   'R.GGRG']`, 

G明显水平显示,但我的 output 返回- ....

顺便说一句,我的主要 function contains_R(grid)有很多辅助函数,例如 rows(grid)、columns(grid)、diagonal1(grid)、diagonal2(grid) 等。

diagonal1(grid) returns every letter from top left horizontally to bottom right 
diagonal2(grid) returns every letter from top right horizontally to bottom left

我应该改变什么,以便我的 output 适用于任何给定的输入?

对于您的问题:

s = ['GGGG','.RGR','RRRR','RGRG'] the output returns R instead of -

你的第三个如果:

if 'RRRR' in rows(grid):
return 'R'

rows 返回 ['GGGG', '.RGR', 'RRRR', 'RGRG'] 所以为什么它返回 R

为了:

Another issue is that when the input is bigger than a 4*4 board like s = ['.GGGGR','RGGRRG','RR...R','GR.GG.','.G.RRG','R.GGRG'],

rows returns  ['.GGGGRRGGRRGRR...RGR.GG..G.RRGR.GGRG']

这就是它返回的原因 -

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM