Python匹配列表中的字符串和递增值

Python匹配列表中的字符串和递增值,python,list,matching,Python,List,Matching,我有两个列表,一个是全局列表,另一个是函数中的局部列表 List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['

我有两个列表,一个是全局列表,另一个是函数中的局部列表

List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]]

function():
    List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]]

    final_list = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1]
基本上,“列表2”表示玩家在一轮游戏中取得的分数(MP18获得100分,MP28获得50分等),而“列表1”将用于为每个玩家累积游戏多轮的分数

我想做的是将每个玩家的得分添加到“列表1”中,我遇到的问题是,由于“final_list”在函数中,因此每次调用函数并为“列表2”生成新值时,除了将新值添加到“列表1”中,它只会覆盖它们。例如,在第一轮之后,“列表1”将具有来自“列表2”的球员的更新值:

因此,MP18将获得100分,MP28将获得50分等。但是,在程序的第二轮(第二轮)中,“列表2”将为每个玩家提供不同的值,例如:

[['MP18, 50], [MP28, 100] etc
但是,因为“最终_列表”是从函数内部创建的,所以第一组分数会被第二组分数覆盖,而不是将第二组分数添加到第一组分数(如果有意义的话)?因此,在第二次运行时,通过“List1”将如下所示:

[[MP28, 100], [MP18, 50]
与预期的结果相反:

[[MP28, 150], [MP18, 150]]
希望这是一个更有帮助的解释:你可以试试这个:

List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]]

List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]]
final_list = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1]
然后,稍后将列表中的值相乘:

new_final_list = [[[a], 2*b] for [a], b in List1]
输出:

[[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]]
编辑:

关于您最近的评论,您可以尝试在函数之外创建一个
最终列表

List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]]

def some_function():
    List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]]
    global List1
    List1 = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1]

相关:。将
List2
制作成dict,您可以在O(1)中更新
List1
,从dict中查找
'MP'
值。欢迎使用SO。不幸的是,这不是一个讨论论坛或教程。请花点时间阅读该页面上的链接和其他链接。我可以问一下“final_list=[[[a],b+dict(List2).get(a,0)]for[a],b in List1]”行实际上在做什么吗?我正在努力理解它,将来知道它会很有帮助,谢谢。@Sean
final_list
是使用列表理解创建的。本质上,它迭代
List1
,并解压每个字符串及其对应的值。然后,代码通过将
List2
传递给
dict
函数,从中创建一个字典,并访问刚刚创建的字典中存储的与
a
关联的值,即每次迭代时的字符串。这是使用
get
执行的,如果找不到字符串,它将返回默认的零。如果你有任何问题,请告诉我。嘿,我现在的程序有点麻烦,如果可以的话,我想寻求一些帮助?您给我的代码非常有效,但是在我的程序中,“List1”是一个全局变量,“List2”在一个函数中(它在程序的前面被操作过)。“List1”是一个全局变量的原因是,我不希望每次调用函数时都重置值。但是,创建“final_list”列表时,它是在函数内部创建的,并且每次调用函数时都重置。有办法解决这个问题吗?如果对您有帮助,我可以发布我的代码:D@Sean没问题!请看我最近的编辑。如果我理解正确,您正在尝试创建
最终\u列表
,而不更改
列表1
。请让我知道我在上面发布的内容是否适合你。嘿,在阅读了我的上一条评论后,我认为我没有很清楚地描述我想要实现的目标,我已经编辑了我在上面的原始问题,试图澄清这一点,如果你仍然愿意帮忙的话:)
List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]]

def some_function():
    List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]]
    global List1
    List1 = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1]