我正在编写一个函数,当给出一个列表列表时,它可以确定特定的第一个字符后面是否是特定的第二个字符(一次或重复),或者后面是另一个随机字符串。当存在另一个随机字符串时,该函数应该返回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
答案 0 :(得分:0)
您可以加入每个列表中的所有字符,并将所有连接的字符串连接到一个字符串中,然后应用正则表达式来检查是否匹配:
>>> 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
>>>