我正在嘗試製作所有可能的5張牌撲克手在一些計算中使用的列表(可能會很慢,但最好有點快)。現在獲取一個列表,我寫了下面的代碼:製作所有可能的5張牌撲克的列表
import itertools
# All possible Cards:
cards = ['2s', '2h', '2d', '2c', '3s', '3h', '3d', '3c', '4s', '4h', '4d', '4c', '5s', '5h', '5d', '5c', '6s', '6h', '6d', '6c', '7s', '7h', '7d', '7c', '8s', '8h', '8d', '8c', '9s', '9h', '9d', '9c', 'Ts', 'Th', 'Td', 'Tc', 'Js', 'Jh', 'Jd', 'Jc', 'Qs', 'Qh', 'Qd', 'Qc', 'Ks', 'Kh', 'Kd', 'Kc', 'As', 'Ah', 'Ad', 'Ac']
hands = []
# Collect all non-trivial cartesian products
for element in itertools.product(cards,cards,cards,cards,cards):
c1,c2,c3,c4,c5 = element
if c1 != c2 or c1!=c3 or c1!=c4 or c1!=c5 or c2 != c3 or c2 != c4 or c2 != c5 or c3 != c4 or c3 != c5 or c4 != c5:
hands.append([c1,c2,c3,c4,c5])
# Sort all elements and delete duplicates
for x in hands:
x.sort()
hands = [tuple(x) for x in hands]
hands = list(set(hands))
# Convert hands back to a list
hands = [list(x) for x in hands]
# Verify result
print(str(len(hands)))
但這內存用完它的完成(超過11音樂會的RAM)前。我試圖使用該列表,以便當我嘗試將兩隻手對準另一隻手時,我可以對所有可能的手進行詳盡測試。
有誰知道我該如何讓這段代碼更好?
無論何時你發現自己在想「做的所有可能的[事情]清單」,你應該首先考慮它是否是連半點合理的東西一切可能的[事情]內存或去通過所有可能的[事情]來完成你的任務。這通常是一個壞主意。 – user2357112
你不需要所有可能的雙手列表來比較兩隻手相互對抗。 – user2357112