いかなるがあったかどうかをテストするif
を使用する前に、最初を残しているか船計算:
left_names = [name for name, size in Ships if name[0] in ships_left]
if left_names:
print(left_names[0])
は、船舶が最初に残っているものを計算することによって、あなたはif
テストの両方の結果を再利用することができますおよびprint()
機能;それ以外の場合は、同じ計算を2回行う必要があります。
また、2つのループは必要ありません。 Ships
リストをループし、各名前をships_left
リストと照合するだけです。私は、より高速なメンバーシップのテストのために、しかし、ships_left
セット作りたい:リストで
ships_left = {"A", "B", "S", "D", "P"}
メンバーシップ・テストは、(Nはリストの長さである)Nステップに取り、セット・メンバーシップ・テストにかかるながら、一定時間(O(1))。これは、それが(ボード上または配置)撃沈されていたら速く簡単すぎると船を取り除く作る:
ships_left.remove(name[0])
あなただけ最初の一致が必要な場合は、ジェネレータ式でnext()
機能を使用することができます。これは、すべての名前を抽出回避:
ship_left = next((name for name, size in Ships if name[0] in ships_left), None)
if ship_left:
print(ship_left)
デモ:
>>> Ships = [
... ["Aircraft Carrier", 5],
... ["Battleship", 4],
... ["Submarine", 3],
... ["Destroyer", 3],
... ["Patrol Boat", 2]
... ]
>>> ships_left = {"A", "B", "S", "D", "P"}
>>> next((name for name, size in Ships if name[0] in ships_left), None)
'Aircraft Carrier'
>>> ships_left.remove('A')
>>> next((name for name, size in Ships if name[0] in ships_left), None)
'Battleship'
>>> ships_left.clear() # remove all ships
>>> next((name for name, size in Ships if name[0] in ships_left), None) is None
True
あなたは私たちに期待される出力を提供することはできますか? – Aurel
論理を説明し、出力として何をしたいのですか?最初の試合だけを望むならば、なぜすべての船に反復するのですか? –
テストしている状態は何ですか? 「*実際に働く」とはどういう意味ですか?あなたは達成しようとしていることを教えていない。 – cdarke