python - 在 python 中的循环中编写循环的更简洁的方法

标签 python for-loop

我有一个对象列表,这些对象是我代码中的特定类,

[object1, object2, object3, object4, object5, object6]

即这个类有两个属性:class.scoreclass.id

我可能有具有相同 ID 的对象。例如:

[object1.id, object2.id, object3.id, object4.id, object5.id, object6.id] = [1, 2, 3, 4, 2, 3]

但分数不同。例如:

[object1.score, object2.score, object3.score, object4.score, object5.score,
object6.score] = [0.25, 0.55, 0.6, 0.4, 0.30, .33]

我想要做的是让这个对象在 id-wise 上没有重复的列表,但是 添加分数。因此对于前面的示例,输出将是:

[object1.id, object2.id, object3.id, object4.id] = [1, 2, 3, 4]
[object1.score, object2.score, object3.score, object4.score] = [.25, .85, .93, .4]

我已经设法用两个 for 循环做到了这一点:

k = 1
    for object in list_of_objects:
        j = 1
        for object2 in list_of_objects:
            if object.id == object2.id and j > k:
                object.score = object.score + object2.score
                list_of_objects.remove(object2)
            j += 1
        k += 1

但我希望以一种更像 python 的方式来实现它:

newlist[:] = [ x for x in list_of_objects if certain_condition(x)]

谢谢。

最佳答案

itertools.groupby 正是为这种情况而制作的 https://docs.python.org/2/library/itertools.html#itertools.groupby

from itertools import groupby
# object.id is our key:
keyfunc = lambda obj: obj.id
list_of_objects = sorted(list_of_objects, key=keyfunc)

scores = [sum(score_list) for id, score_list in groupby(list_of_objects, keyfunc)]
ids = [id for id, score_list in groupby(list_of_objects, keyfunc)]

关于python - 在 python 中的循环中编写循环的更简洁的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31957543/

相关文章:

python - PyQt5按钮背景颜色不生效

python - 如何计算 'item' 列中有多少个不同的项目?

c# - 为什么 "monkey with the loop index"不好?

java - 解析 JSON 时如何替换 System.out.println 作为返回?

java - 不显示表达式语言的值

python - 命令行参数基础,Python

python - 由tensorflow中的索引张量指定的切片2d张量

java - 将输入与 .txt 文件中的日期进行比较时出现问题

c/c++ for循环条件语句

python - 如何捕获尚未完全导入的模块的异常?