Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数据结构选择_Python_List_Data Structures_Dictionary - Fatal编程技术网

Python数据结构选择

Python数据结构选择,python,list,data-structures,dictionary,Python,List,Data Structures,Dictionary,假设我有一份足球运动员的名单。现在,我只有四名球员。[梅西、伊涅斯塔、哈维、内马尔]。稍后将添加更多玩家。我想记录这些足球运动员在比赛过程中相互传球的次数。为了跟踪通行证,我相信我需要类似的数据结构 Messi = {Iniesta: 4, Xavi: 5 , Neymar: 8} Iniesta = {Messi: 4, Xavi: 10 , Neymar: 5} Xavi = {Messi: 5, Iniesta: 10 , Neymar: 6} Neymar = {Messi: 8, I

假设我有一份足球运动员的名单。现在,我只有四名球员。[梅西、伊涅斯塔、哈维、内马尔]。稍后将添加更多玩家。我想记录这些足球运动员在比赛过程中相互传球的次数。为了跟踪通行证,我相信我需要类似的数据结构

Messi = {Iniesta: 4, Xavi: 5 , Neymar: 8}
Iniesta = {Messi: 4, Xavi: 10 , Neymar: 5}
Xavi  = {Messi: 5, Iniesta: 10 , Neymar: 6}
Neymar = {Messi: 8, Iniesta: 5 , Xavi: 6}
我用字典对吗?如果不是,什么样的数据结构更适合?如果是的话,我如何使用字典来解决这个问题?我如何解决新玩家不时被加入的问题,以及为他们创建字典的问题。 例如,如果我得到列表中的第一个元素,第一次迭代中的列表(I)是梅西,我如何使用存储在其中的值创建一个名为梅西的字典。这就是我如何得到下面这一行

Messi = [Iniesta: 4, Xavi: 5 , Neymar: 8]
有人建议我试试这样的东西

my_dynamic_vars = dict()
string = 'someString'

my_dynamic_vars.update({string: dict()})

这里是Python和编程新手。在学习的过程中不断积累经验。提前感谢您的帮助。

我建议您构建一个二维方形阵列。数组应具有维度
N x N
。每个索引代表一个玩家。因此
传递[i][j]
的值是玩家
i
传递给玩家
j
的次数。
传递[i][i]
的值始终为零,因为玩家不能传递给自己

这里有一个例子

players = ['Charles','Meow','Rebecca']

players = dict( zip(players,range(len(players)) ) )
rplayers = dict(zip(range(len(players)),players.keys()))

passes = []
for i in range(len(players)):
    passes.append([ 0 for i in range(len(players))])

def pass_to(f,t):
    passes[players[f]][players[t]] += 1

pass_to('Charles','Rebecca')
pass_to('Rebecca','Meow')
pass_to('Charles','Rebecca')

def showPasses():
    for i in range(len(players)):
        for j in range(len(players)):
            print("%s passed to %s %d times" % ( rplayers[i],rplayers[j],passes[i][j],))

showPasses()

我建议你构造一个二维正方形数组。数组应具有维度
N x N
。每个索引代表一个玩家。因此
传递[i][j]
的值是玩家
i
传递给玩家
j
的次数。
传递[i][i]
的值始终为零,因为玩家不能传递给自己

这里有一个例子

players = ['Charles','Meow','Rebecca']

players = dict( zip(players,range(len(players)) ) )
rplayers = dict(zip(range(len(players)),players.keys()))

passes = []
for i in range(len(players)):
    passes.append([ 0 for i in range(len(players))])

def pass_to(f,t):
    passes[players[f]][players[t]] += 1

pass_to('Charles','Rebecca')
pass_to('Rebecca','Meow')
pass_to('Charles','Rebecca')

def showPasses():
    for i in range(len(players)):
        for j in range(len(players)):
            print("%s passed to %s %d times" % ( rplayers[i],rplayers[j],passes[i][j],))

showPasses()

我建议你构造一个二维正方形数组。数组应具有维度
N x N
。每个索引代表一个玩家。因此
传递[i][j]
的值是玩家
i
传递给玩家
j
的次数。
传递[i][i]
的值始终为零,因为玩家不能传递给自己

这里有一个例子

players = ['Charles','Meow','Rebecca']

players = dict( zip(players,range(len(players)) ) )
rplayers = dict(zip(range(len(players)),players.keys()))

passes = []
for i in range(len(players)):
    passes.append([ 0 for i in range(len(players))])

def pass_to(f,t):
    passes[players[f]][players[t]] += 1

pass_to('Charles','Rebecca')
pass_to('Rebecca','Meow')
pass_to('Charles','Rebecca')

def showPasses():
    for i in range(len(players)):
        for j in range(len(players)):
            print("%s passed to %s %d times" % ( rplayers[i],rplayers[j],passes[i][j],))

showPasses()

我建议你构造一个二维正方形数组。数组应具有维度
N x N
。每个索引代表一个玩家。因此
传递[i][j]
的值是玩家
i
传递给玩家
j
的次数。
传递[i][i]
的值始终为零,因为玩家不能传递给自己

这里有一个例子

players = ['Charles','Meow','Rebecca']

players = dict( zip(players,range(len(players)) ) )
rplayers = dict(zip(range(len(players)),players.keys()))

passes = []
for i in range(len(players)):
    passes.append([ 0 for i in range(len(players))])

def pass_to(f,t):
    passes[players[f]][players[t]] += 1

pass_to('Charles','Rebecca')
pass_to('Rebecca','Meow')
pass_to('Charles','Rebecca')

def showPasses():
    for i in range(len(players)):
        for j in range(len(players)):
            print("%s passed to %s %d times" % ( rplayers[i],rplayers[j],passes[i][j],))

showPasses()

这是一个有趣的问题,也许是一个很好的情况,在这种情况下,像图形这样的东西可能会很有用。只需使用一个字典,它的键是球员的名字,值是已经传球的球员的列表,就可以在python中实现一个图形

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']
这种类似图形的数据结构的优点在于,不仅保留了过程的数量,还保留了每个过程的信息(从梅西到伊涅斯塔)

这里是一些捕捉这种行为的函数的基本实现(我认为初学者应该能够掌握这些东西,如果下面的内容有点太混乱,请告诉我)

理想情况下,您可以将
过程
保存在一些可以持续更新的数据库中,但即使没有数据库,您也可以添加以下代码并运行它以获得想法:

# 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中实现一个图形

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']
这种类似图形的数据结构的优点在于,不仅保留了过程的数量,还保留了每个过程的信息(从梅西到伊涅斯塔)

这里是一些捕捉这种行为的函数的基本实现(我认为初学者应该能够掌握这些东西,如果下面的内容有点太混乱,请告诉我)

理想情况下,您可以将
过程
保存在一些可以持续更新的数据库中,但即使没有数据库,您也可以添加以下代码并运行它以获得想法:

# 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中实现一个图形

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']
这种类似图形的数据结构的优点在于,不仅保留了传递次数,而且