寻找列表中的障碍物?

2024-05-21 05:38:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个函数,当给定一个列表时,它可以确定一个特定的第一个字符后面是一个特定的第二个字符(一次或重复),还是后面是另一个随机字符串。当存在另一个随机字符串时,函数应返回False,但当不存在随机字符串时,函数应返回True

基本上,如果除.之外的任何其他字符位于其当前列表或任何后续列表中的B之后,则应返回False,但如果仅存在.,则应返回True

例如,如果第一个字符是B,第二个字符是.,列表列表是[['.','.','B','.'],['.','.','.','.']],那么它应该返回True,但是如果列表列表是[['a','c','B','r'],['.','s','g','h']],那么它应该返回False,因为一系列随机字符串跟在B后面

任何提示或帮助都将不胜感激这是我迄今为止的代码:

def free_of_obstacles(lst):
    A = 'B'
    B = '.'
    for i, v in enumerate(lst):
            if A in v:
                continue
            if B in v:
                continue
                return True
            else: 
                return False

Tags: of函数字符串代码infalsetruefree
1条回答
网友
1楼 · 发布于 2024-05-21 05:38:24

您可以将每个列表中的所有字符合并,并将所有合并的字符串合并为一个字符串,然后应用正则表达式检查是否存在匹配项:

>>> lst=[['.','.','B','.'],['.','.','.','.']]
>>> import re
>>> bool(re.search(r'B(\.+)$', ''.join(''.join(i) for i in lst)))
True
>>> lst=[['a','c','B','r'],['.','s','g','h']]
>>> bool(re.search(r'B(\.+)$', ''.join(''.join(i) for i in lst)))
False
>>> 

编辑1>以上解决方案作为返回True或False的函数:

>>> import re
>>> def free_of_obstacles(lst):
...     return bool(re.search(r'B(\.+)$', ''.join(''.join(i) for i in lst)))
... 
>>> lst=[['a','c','B','r'],['.','s','g','h']]
>>> free_of_obstacles(lst)
False
>>> lst=[['.','.','B','.'],['.','.','.','.']]
>>> free_of_obstacles(lst)
True

不使用任何导入的模块:

样本运行1

>>> lst=[['.','.','B','.'],['.','.','.','.']]
>>> newlst=[j for i in lst for j in i]
>>> newlst=newlst[newlst.index('B')+1:]
>>> newlst
['.', '.', '.', '.', '.']
>>> list(map(lambda x:x=='.', newlst))
[True, True, True, True, True]
>>> all(list(map(lambda x:x=='.', newlst)))
True

样品运行2

>>> lst=[['a','c','B','r'],['.','s','g','h']]
>>> newlst=[j for i in lst for j in i]
>>> newlst=newlst[newlst.index('B')+1:]
>>> newlst
['r', '.', 's', 'g', 'h']
>>> list(map(lambda x:x=='.', newlst))
[False, True, False, False, False]
>>> all(list(map(lambda x:x=='.', newlst)))
False

编辑2>以上解决方案作为返回True或False的函数:

>>> def free_of_obstacles(lst):
...     newlst=[j for i in lst for j in i]
...     newlst=newlst[newlst.index('B')+1:]
...     return all(list(map(lambda x:x=='.', newlst)))
... 
>>> lst=[['.','.','B','.'],['.','.','.','.']]
>>> free_of_obstacles(lst)
True
>>> lst=[['a','c','B','r'],['.','s','g','h']]
>>> free_of_obstacles(lst)
False
>>> 

相关问题 更多 >