如果使用Python满足某个条件,则查找列表元素的平均值?

2024-05-15 22:18:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,格式如下:

mylist = ["Joe, 100%", "Joe, 80%", "Joe, 90%", "Sally, 95%", "Sally, 80%", "Jimmy, 90%", ...]

我要做的是,首先计算每个名字出现的次数。如果一个名称出现两次或两次以上,请将该名称与平均百分比一起追加。所以,我试图得到以下输出:

newlist = ["Joe, 90%", "Sally, 87.5%"]

为此,我只mylist.split(", ")获取名称,并使用Counter()查找名称出现的次数。然后,我使用一个简单的if >= 2语句将名称附加到newlist,如果名称出现2次或更多次。你知道吗

然而,尽管我尝试了很多不同的方法,但我还是不知道如何在最后的列表中把百分比和名字一起拿回来。我也不知道如何在谷歌上表达我的问题,所以我找不到任何帮助。有人知道怎么做吗?如果这个问题是重复的,请让我知道(并提供一个链接,我可以学习),我可以删除这个问题。谢谢!你知道吗


Tags: 名称列表if格式counter语句名字次数
2条回答

你可以试试这个:

from collections import defaultdict
counts = defaultdict(int)
percents = defaultdict(int)

for item in mylist:
    name, percent = item.split(',')
    percent = int(percent.lstrip().rstrip('%'))
    percents[name]+=percent
    counts[name]+=1

result = []
for k,v in counts.items():
    if v > 1:
        result.append(f"{k}, {percents[k]/v}%")
print(result)

输出

['Joe, 90.0%', 'Sally, 87.5%']

我建议您创建一个分数字典,其中键是名称,值是他们的分数列表。此代码段显示了如何实现这一点:

mydict = {}
for item in mylist:
    name, score = item.split(", ") # splits each item into a score and a name
    score = float(score.replace("%", "")) # converts string score to a float
    if mydict[name]: # checks if the name already exists in the dictionary
        mydict[name].append(score)
    else:
        mydict[name] = [score]

这会给你留下一本按名字排列的分数字典。现在你要做的就是平均字典里的分数:

newlist = []
for name in mydict:
    if len(mydict[name]) >= 2:
        average = str(sum(mydict[name]))/len(mydict[name])) + "%"
        straverage = name + ", " + average
        newlist.append(straverage)

相关问题 更多 >