对不起,我是一个初学者,正在寻找处理某些数据的帮助。
所以我有两个列表:
一个描述游戏中所有参与者的分数 另一个包含每个参与者玩游戏的次数
scores=['win', 'draw', 'lose', 'lose', 'win', 'win']
trials=[2,3,1]
这意味着有3位参与者,第一次参加了两次比赛,并获得了“胜利”和“平局”等。
如何拆分分数列表,使其成为一个嵌套列表,将每个参与者的分数作为列表?我想找到一个人的平均分数。
例如splitscores=[['win','draw']['lose','lose','win']['win]]
我已经通过以下方式获得了第一次审判:
trial1=[]
for item in scores:
trial1.append(scores[:trials[0]])
print(trial1)
但不知道通过循环获得其他线索 有人可以帮忙吗?还是我有更好的方法来找到一个人的平均分数?
答案 0 :(得分:5)
您可以使用itertools.accumulate
来累加trials
列表。然后对切片使用列表理解:
from itertools import accumulate
scores = ['win', 'draw', 'lose', 'lose', 'win', 'win']
trials = [2,3,1]
idx = [0] + list(accumulate(trials))
res = [scores[start:end] for start, end in zip(idx, idx[1:])]
[['win', 'draw'], ['lose', 'lose', 'win'], ['win']]
对于真正的惰性解决方案,您可以使用itertools
pairwise
recipe:
from itertools import accumulate, tee
def pairwise(iterable):
a, b = tee(iterable)
next(b, None)
return zip(a, b)
idx = accumulate([0] + trials)
res = [scores[start:end] for start, end in pairwise(idx)]
[['win', 'draw'], ['lose', 'lose', 'win'], ['win']]
答案 1 :(得分:4)
答案 2 :(得分:4)
其他答案很好。如果您发现更清晰的话,也可以使用简单的for
循环来完成此操作:
scores = ['win', 'draw', 'lose', 'lose', 'win', 'win']
trials = [2, 3, 1]
trial1 = []
# This variable holds the first index of the next sublist
idx = 0
for n in trials:
trial1.append(scores[idx:idx + n])
# The next sublist starts where the previous one ended
idx += n
print(trial1)
输出:
[['win', 'draw'], ['lose', 'lose', 'win'], ['win']]