<p>感谢您澄清预期结果。这是我测试的答案。它可能不是您预期结果的确切格式,但我让您来解决它。你知道吗</p>
<pre><code>import pandas as pd
def is_duplicate_team(team, group):
'''check if an option already exists'''
return any(group == t for t in team)
def is_player_exists(group, arr):
'''check if a player exists in a group'''
return any(x in g for g in group for x in arr)
df = [ (24 ,'Player1','D'),
(21 ,'Player2','D'),
(8 ,'Player3','B'),
(14 ,'Player4','C'),
(20 ,'Player5','D'),
(13 ,'Player6','C'),
(-1 ,'Player7','A'),
(5 ,'Player8','A'),
(8 ,'Player9','B'),
(6 ,'Player10','B'),
(20 ,'Player11','D'),
(15 ,'Player12','C'),
(0 ,'Player13','A'),
(12 ,'Player14','C'),
(0 ,'Player15','A'),
(10 ,'Player16','B')]
df = pd.DataFrame(df, columns=['handicap', 'name', 'hcp_ABCD'])
from itertools import product
grouped = df.groupby('hcp_ABCD')['name'].apply(list).reset_index()
df_name = [n for n in grouped.name]
df_comb = [p for p in product(*df_name)]
# below code will get all combinations of groups and for a team having all players
teams=[]
for i in df_comb[:-1]:
group=[i]
for j in df_comb[1:]:
if not is_player_exists(group, j):
group.append(j)
if len(group) == 4:
if not is_duplicate_team(teams, group):
teams.append(group)
continue
# below code will print the output similar to what you expected
i=0
for t in teams:
i+=1
print('option: ', str(i) )
for p in t:
print(p)
</code></pre>