这是一个有趣的问题,也许是一个不错的情况有点像图可能是有用的。你可以通过简单地使用一个字典来实现一个图表,这个字典的键是玩家的名字,其值是列出已经传递球的玩家。
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