Tôi muốn tính tổng nhiều thuộc tính cùng một lúc trong một vòng lặp:
classSome(đối tượng):
def __init__(self, acounter, bcounter):
self.acounter = acounter
self.bcounter = bcounter
someList = [Some(x, x) cho x trong phạm vi (10)]
Tôi có thể làm điều gì đó đơn giản và nhanh hơn thế này không?
atotal = sum([x.acounter for x in someList])
btotal = sum([x.bcounter for x in someList])
Đầu tiên - tổng hợp
Không cần danh sách - thay vào đó bạn có thể sử dụng biểu thức trình tạo:
atotal = sum(x.acounter for x in someList)
Bạn có thể viết một hàm trợ giúp để tìm kiếm danh sách một lần rồi tìm từng thuộc tính theo thứ tự từng mục, ví dụ:
def multisum(iterable, *attributes, **kwargs):
sums = dict.fromkeys(thuộc tính, kwargs.get('start', 0))
cho nó trong lần lặp:
cho attr trong thuộc tính:
tổng[attr] += getattr(it, attr)
trả lại số tiền
số lượng = multisum(someList, 'acounter', 'bcounter')
# {'bộ đếm': 45, 'bộ đếm': 45}
Tôi là một lập trình viên xuất sắc, rất giỏi!