這是一個有趣的問題,也許是一個不錯的情況有點像圖可能是有用的。你可以通過簡單地使用一個字典來實現一個圖表,這個字典的鍵是玩家的名字,其值是列出已經傳遞球的玩家。
passes = {
'Messi' : ['Iniesta', 'Xavi','Neymar', 'Xavi', 'Xavi'],
'Iniesta' : ['Messi','Xavi', 'Neymar','Messi', 'Xavi'],
'Xavi' : ['Messi','Neymar','Messi','Neymar'],
'Neymar' : ['Iniesta', 'Xavi','Iniesta', 'Xavi'],
}
爲了任何一個球員得到傳球次數:
len(passes['Messi'])
要一個新的過程添加到一個特定的玩家:
passes['Messi'].append('Xavi')
要計算梅西傳遞的次數到哈維
passes['Messi'].count('Xavi')
要添加一個新的球員,只是加了他,他第一次做了一通現在
passes['Pele'] = ['Messi']
,他還準備有更多的通行證「附加」他
passes['Pele'].append['Xavi']
什麼這個圖是偉大的類數據結構是,您不僅可以保留通行證的數量,而且還可以保存每個通行證的信息(從Messi到Iniesta)
這裏是一些超級基礎實施的一些功能,它捕獲這種行爲(我認爲初學者應該能夠掌握這個東西,讓我知道,如果跌破什麼是有點太混亂了)
passes = {}
def new_pass(player1, player2):
# if p1 has no passes, create a new entry in the dict, else append to existing
if player1 not in passes:
passes[player1] = [player2]
else:
passes[player1].append(player2)
def total_passes(player1):
# if p1 has any passes, return the total number; otherewise return 0
total = len(passes[player1]) if player1 in passes else 0
return total
def total_passes_from_p1_to_p2(player1, player2):
# if p1 has any passes, count number of passes to player 2; otherwise return 0
total = passes[player1].count(player2) if player1 in passes else 0
return total
理想情況下,你會在一些數據庫,你可以不斷更新來節省passes
,但即使沒有數據庫,你可以添加以下代碼並運行它以得到這樣的想法:
# add some new passes!
new_pass('Messi', 'Xavi')
new_pass('Xavi', 'Iniesta')
new_pass('Iniesta', 'Messi')
new_pass('Messi', 'Iniesta')
new_pass('Iniesta', 'Messi')
# let's see where we currently stand
print total_passes('Messi')
print total_passes('Iniesta')
print total_passes_from_p1_to_p2('Messi', 'Xavi')
希望你覺得這有幫助;這裏有更多關於python實現的圖表,從the python docs(這是一個有趣的答案寫出來,謝謝!)
你可以使用defaultdict from collections模塊。這是處理這個任務的最簡單的方法。 [Here](http://docs.python.org/2/library/collections.html#collections.defaultdict)是文檔和示例的鏈接。 – Shahram
這是一個側面提示 - 但是如果你想創建一個字典,你想使用'{}'而不是'[]'(生成一個列表)。因此,'梅西= [伊涅斯塔:4,哈維:5,內馬爾:8]'將會是'梅西= {伊涅斯塔:4,哈維:5,內馬爾:8}',因爲'Neymar'等是物體。 – chase
修正了它。謝謝! @追 – user3078335