我有两个列表:
x = [1, 2, 3, 1, 1, 2, 3]
y = [1.3, 0.5, 0.7, 1.9, 2.5, 3.1, 1.4]
我想根据x中每个重复元素对y个元素求和。
例如,对于x (= 1)的第一个元素,我必须对索引为 0、3和4 的所有y元素求和在x中 1 。我要保存元素及其总和。
我的输出将是这样的:
sum = [[1, 5.7],
[2, 3.6],
[3, 2.1]]
我该如何编码?
答案 0 :(得分:4)
这是使用defaultdict
的一种方法:
from collections import defaultdict
d = defaultdict(float)
for k,v in zip(x,y):
d[k] += v
list(map(list, d.items()))
# [[1, 5.7], [2, 3.6], [3, 2.0999999999999996]]
答案 1 :(得分:3)
您可以使用<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
>
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
>
<androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/header" >
// Header of variable height
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_items"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
clContent.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
clContent.getViewTreeObserver().removeOnPreDrawListener(this);
int minHeight = calculateMinHeight();
clHeader.setMinHeight(minHeight);
return false;
}
});
}
输出:
itertools.groupby
答案 2 :(得分:2)
这是使用单线的解决方案:
>>> [[x_num, sum([y_num for i, y_num in enumerate(y) if x[i] == x_num])] for x_num in set(x)]
[[1, 5.7], [2, 3.6], [3, 2.0999999999999996]]