計算留第一什麼船,使用if
之前測試是否有任何:
left_names = [name for name, size in Ships if name[0] in ships_left]
if left_names:
print(left_names[0])
通過計算船舶第一剩下什麼,你可以重新使用兩種if
測試結果和print()
函數;否則你必須做兩次相同的計算。
你也不需要兩個循環;您只需要遍歷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