我需要合并两个列表,然后计算与某个值对应的所有值。你知道吗
这两个列表是:
inControl = ["False", "False", "True", "True","False", "True", "False", "True", "True", "False", "False", "False", "False", "False", "False", "True", "False", "True", "False", "False"]
rts = [379, 396, 480, 443, 365, 280, 487, 446, 350, 367, 405, 391, 484, 359, 367, 305, 359, 479, 436, 333]
我需要对所有rts
值对应的所有False
值求和,然后对True
值求和(它们都是按顺序排列的)。你知道吗
我基本上已经把这两个列表组合成了zip
函数,但是我完全不知道接下来该怎么做。。。任何帮助都将不胜感激。你知道吗
非常感谢:)
给出:
我假设
inControl
是字符串列表,而不是布尔值列表。为了使我的解决方案有效,我将把inControl
转换为布尔列表:使用
itertools.compress
计算所有True
元素的总和:现在,我们可以计算
false_sum
:让-弗朗索瓦的解决方案将很好地工作,是相当可读性。不过,它确实对数据进行了两次传递。如果列表很小,这并不是什么大问题,但是如果列表很大,你可以通过单次传递将操作时间大致减少一半。你知道吗
一种通用方法是:
此代码不假定
inControl
只有False
和True
。它实际上可以有任意数量的唯一值。你知道吗更可爱的方法是使用
Counter
模块中的collections
类。是一个用来记录计数的字典。添加两个计数器做了一件显而易见的事情:相同键的值相加。我们可以为每对元素创建一个Counter
实例,并将所有计数器相加。请注意,为每个元素创建一个Counter
可能有点过头了——上面的解决方案更有效。但出于教育目的,此解决方案类似于:看起来很奇怪,布尔是弦,但是。。。你知道吗
在匹配元素上使用
zip
,然后使用sum
。你知道吗(为python3中的另一部分重新创建
zip
,因为zip
是iterable)结果:
也许
st
可以通过与sum
:st=sum(rts)-sf
进行较少的字符串比较来计算(添加越多,字符串比较越少)变量:真与假的小循环
相关问题 更多 >
编程相关推荐