Python 计算并求和所有以前的相似项
假设我们有一个术语列表:Python 计算并求和所有以前的相似项,python,list,loops,count,sum,Python,List,Loops,Count,Sum,假设我们有一个术语列表: termList=[“A”、“A”、“B”、“C”、“C”、“C”、“E”] 现在,假设我们有另一个列表,包含更多列表: otherList=[[A,“E”],[A”,“B”,“C”,“C”],[B”,“B”],[A”,“C”] 我想做的是,对于otherList的每个索引,检查其每个术语加上之前所有索引的总和,以确保每个术语的总量没有超过termList中的总量 例如: 迭代1:A(1),E(1) 迭代2:A(2),B(1),C(2),E(1) 迭代3:发现B有
termList=[“A”、“A”、“B”、“C”、“C”、“C”、“E”]
现在,假设我们有另一个列表,包含更多列表:
otherList=[[A,“E”],[A”,“B”,“C”,“C”],[B”,“B”],[A”,“C”]
我想做的是,对于
otherList
的每个索引,检查其每个术语加上之前所有索引的总和,以确保每个术语的总量没有超过termList
中的总量
例如:
- 迭代1:A(1),E(1)
- 迭代2:A(2),B(1),C(2),E(1)
- 迭代3:发现B有三个实例。这比
中存在的一个实例多,因此循环结束termList
我一直在思考如何在不嵌套一百万个循环的情况下实现这一点。我想我们可以使用生成器表达式、
all
和sum
的组合,但无法完全弄清楚如何添加前面的所有项,以及如何检查所有的和是否有效。计数器
将适用于您,您可以将它们添加到一起:
from collections import Counter
termList = ["A", "A", "B", "C", "C", "C", "E"]
otherList = [["A", "E"], ["A", "B", "C", "C"], ["B", "B"], ["A", "C"]]
term_count = Counter(termList)
c = Counter()
for lst in otherList:
c += Counter(lst)
if any(c[v] > term_count[v] for v in c):
break
print(c)
else:
print('Exhausted')
输出:
Counter({'A': 1, 'E': 1})
Counter({'C': 2, 'A': 2, 'B': 1, 'E': 1})
这是家庭作业吗?一种方法是使用两个字典。对第一个列表进行迭代,并为每个实例将字典值增加1。示例的输出为:
{A':2,'B':1,'C':3,'E':1}
。接下来在其他列表中的每个列表上迭代,并使用单独的字典执行相同的操作。输出将是:{'a':3,'E':1,'B':3,'C':3}
现在比较您的列表(或者在迭代第二个列表时进行比较)。您可能还希望为您的字典使用a将0作为默认值返回。这样就省去了必须解释关键错误的麻烦
在这句话中,你所说的“上一个”是什么意思也不太清楚
检查每个术语的总和加上所有以前的索引的总和,以查看每个术语的总量没有超过术语列表中的总量
我在这里只看到3个循环——计算termlist元素、获取otherList元素(sublist)、计算子列表元素(并将结果添加到全局和中)“它可以是一个循环。基本上,你需要在一个平面和CA嵌套列表中拥有每个值的计数,并对它们进行兼容?啊,我想这就是我想要的。”。您的输出是否正确,或者第三行是否实际显示为“耗尽”?for循环的else
子句仅在循环未中断时执行,因此耗尽
仅在到达其他列表
末尾时才会打印。在条件之后移动了打印(c)
,因此只输出所需的详细信息。对不起,我读得很快。我本想问它是否应该被打破,但后来看到你在支票前有你的打印声明。编辑更好;谢谢