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)
,因此只输出所需的详细信息。对不起,我读得很快。我本想问它是否应该被打破,但后来看到你在支票前有你的打印声明。编辑更好;谢谢