我有一份清单清单:
l = [['a1', 2], ['a1', 3], ['a1', 1], ['b1', 4], ['b1', 2], ['b1', 6], ['c1', 2]]
我想将每个“子列表”与其他“子列表”进行比较,匹配索引[0]
具有相同值的那些,并保留那些索引最大的{{1}结果是这样的结果:
[1]
我一直在尝试各种for循环和条件语句,但我已经陷入困境。
有人能帮我一把,让我走上正轨吗?
答案 0 :(得分:4)
使用here
@Override
public int getItemViewType(int position) {
return list.get(position) != null ? 1 : 0;
}
答案 1 :(得分:2)
自然答案正在使用itertools.groupby
,按子列表的第一个元素分组,只需将max
应用于每个组。由于第一个分组元素是相同的,max
根据第二个元素自然地最大:整数。
import itertools
l=[['a1',2],['a1',3],['a1',1],['b1',4],['b1',2],['b1',6],['c1',2]]
print([max(v) for _,v in itertools.groupby(l,lambda x : x[0])])
结果:
[['a1', 3], ['b1', 6], ['c1', 2]]
注意:如果列表未按照第一个元素值排序,则需要使用sorted(l)
而不是l
答案 2 :(得分:1)
创建一个字典以保存所有最大值:
public final class user$sqrt extends AFunction {
public static final Object const__0 = Double.valueOf(1.0D);
public static Object invokeStatic(Object x) {
user$sqrt$s__44945 s = null;
user$sqrt$good_enough_QMARK___44947 good_enough_QMARK_ = null;
user$sqrt$improve__44949 improve = null;
s = new user$sqrt$s__44945(good_enough_QMARK_, improve);
good_enough_QMARK_ = new user$sqrt$good_enough_QMARK___44947(x);
Object var10002 = x;
x = null;
improve = new user$sqrt$improve__44949(var10002);
user$sqrt$s__44945 var10000 = (user$sqrt$s__44945)s;
((user$sqrt$s__44945)s).good_enough_QMARK_ = good_enough_QMARK_;
var10000.improve = improve;
user$sqrt$good_enough_QMARK___44947 var4 = (user$sqrt$good_enough_QMARK___44947)good_enough_QMARK_;
user$sqrt$improve__44949 var5 = (user$sqrt$improve__44949)improve;
return ((IFn)s).invoke(const__0);
}
}
public final class user$sqrt$good_enough_QMARK___44947 extends AFunction {
Object x;
public static final Var const__1 = (Var)RT.var("user", "abs");
public static final Var const__3 = (Var)RT.var("user", "square");
public user$sqrt$good_enough_QMARK___44947(Object var1) {
this.x = var1;
}
public Object invoke(Object guess) {
DO var10000 = (DO)const__1.getRawRoot();
DO var10001 = (DO)const__3.getRawRoot();
Object var10002 = guess;
guess = null;
return Numbers.lt(var10000.invokePrim(RT.doubleCast((Number)Numbers.minus(var10001.invokePrim(RT.doubleCast((Number)var10002)), this.x))), 1.0E-4D)?Boolean.TRUE:Boolean.FALSE;
}
}
public final class user$sqrt$improve__44949 extends AFunction {
Object x;
public static final Var const__0 = (Var)RT.var("user", "avg");
public user$sqrt$improve__44949(Object var1) {
this.x = var1;
}
public Object invoke(Object guess) {
DDO var10000 = (DDO)const__0.getRawRoot();
double var10001 = RT.doubleCast((Number)Numbers.divide(this.x, guess));
Object var10002 = guess;
guess = null;
return var10000.invokePrim(var10001, RT.doubleCast((Number)var10002));
}
}
答案 3 :(得分:0)
您可以{@ 3}}替换@Patrick Haugh解决方案中的lambda
表达式,如下所示:
In [18]: from itertools import groupby
In [19]: from operator import itemgetter
In [20]: l = [['b1', 2], ['a1', 2], ['a1', 3], ['c1', 2], ['a1', 1], ['b1', 4], ['b1', 6]]
In [21]: [max(g, key=itemgetter(1)) for _, g in groupby(sorted(l), itemgetter(0))]
Out[21]: [['a1', 3], ['b1', 6], ['c1', 2]]