获取列表中任意两个连续元素之间最大差异的Pythonic方法
我有一个列表,其中存储了一场分回合进行的游戏的分数。在每个索引中,存储的分数等于该轮之前(包括该轮)的总分数获取列表中任意两个连续元素之间最大差异的Pythonic方法,python,list,list-comprehension,Python,List,List Comprehension,我有一个列表,其中存储了一场分回合进行的游戏的分数。在每个索引中,存储的分数等于该轮之前(包括该轮)的总分数 第1轮-本轮得分为5分 本轮得分为2-3分 第3轮-本轮得7分 第4轮-本轮得4分 这将导致 total_score = [5, 8, 15, 19] 我怎样才能把它巧妙地转换成一个列表,其中有每一轮在每个索引上的得分,而不是那轮的总分 所以我想把上面的列表变成: round_scores = [5, 3, 7, 4] 只需对其进行迭代并从当前索引的分数中减去上一个索引的分数并不
- 第1轮-本轮得分为5分
- 本轮得分为2-3分
- 第3轮-本轮得7分
- 第4轮-本轮得4分
total_score = [5, 8, 15, 19]
我怎样才能把它巧妙地转换成一个列表,其中有每一轮在每个索引上的得分,而不是那轮的总分
所以我想把上面的列表变成:
round_scores = [5, 3, 7, 4]
只需对其进行迭代并从当前索引的分数中减去上一个索引的分数并不特别困难。但是有没有更整洁的方法呢?也许是一行列表?我对Python相当陌生,但我在其他答案中看到了一行代码中的一些神奇之处。您可以使用
zip
来理解列表:
[total_score[0]] + [abs(x - y) for x, y in zip(total_score, total_score[1:])]
示例:
total_score = [5, 8, 15, 19]
print([total_score[0]] + [abs(x - y) for x, y in zip(total_score, total_score[1:])])
# [5, 3, 7, 4]
您可以迭代索引:
round_分数=[总分[0]]
四舍五入分数+=[总分数[i]-范围内i的总分数[i-1](1,len(总分数))]
或者在一个表达式中进行一点预处理:
temp=[0]+总分
四舍五入得分=[temp[i]-范围内i的temp[i-1](1,len(temp))]
使用numpy
import numpy as np
total_score = [5, 8, 15, 19]
round_scores = np.diff(total_score, prepend=0)
res=[total_score[0]+[x-y代表x,y在zip中(total_score[1:],total_score[:-1])
可能还有更漂亮的解决方案a=np.array(total_score)
那么a[1:]-=a[:-1]
是一个漂亮的解决方案(不是我的遗憾),这是一个非常好的解决方案,我只希望它能在常规列表上工作,因为创建该数组所需的时间比下面的实际解决方案要长。或者对于较小的字节计数res=[x-y代表x,y在zip中(total_score,[0]+total_score)]
此外,我不会使用abs
。如果你得分为负值,它必须显示为负值(并且你总是可以颠倒邮政编码的顺序)。很好的解决方案-我建议你将它添加到标记的副本中!
import numpy as np
total_score = [5, 8, 15, 19]
round_scores = np.diff(total_score, prepend=0)