2016-10-31 6 views
1

リストを指定すると、特定の最初の文字の後に特定の2番目の文字(1回または繰り返し)が続くか、別のランダムな文字列が続くかどうかを判断できる関数を書いています。別のランダムな文字列が存在する場合、関数はFalseを返すべきですが、ランダムな文字列が存在しない場合、関数はTrueを返します。リストのリスト内の障害物を検索していますか?

基本的に.以外の文字が現在のリストまたはそれ以降のリストでBの後に来る場合は、Falseを返しますが、.が存在する場合はTrueを返します。例えば

、最初の文字はBだったと2番目の文字が.だったとリストのリストは、それがTrueを返す必要がありますが、リストのリストがランダム文字列のシリーズは、以下のため、それがFalseを返すべき[['a','c','B','r'],['.','s','g','h']]た場合[['.','.','B','.'],['.','.','.','.']]た場合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

あなたは、各リスト内のすべての文字を結合し、単一の文字列にすべて参加した文字列を結合して、適用することができます:

任意のヒントやヘルプは、これは私がこれまで持っているコードでいただければ幸いです

:溶液上の

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

EDIT 1 ----> TrueまたはFalseを返す関数として:試合かではないがあるかどうかを確認する正規表現すべてのインポートされたモジュールを使用せずに

:真を返す関数として

サンプル実行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 

EDIT 2 ---->または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 
>>> 
+0

何らかの理由で、何かが動作していないかテストケースを実行したときに "再定義されていません"というNameErrorが発生しています – warrior4223

+0

@ warrior4223 ohh申し訳ありません..このようにreモジュールをインポートする必要があります: 'import re ' – ritesht93

+0

申し訳ありませんが、これはたくさんありますが、モジュールをインポートせずにこれを達成する方法はありますか?あなたのコードが動作して以来、私はあなたに最善の答えを与えます – warrior4223

関連する問題