假设我们有一个术语列表:
termList = ["A", "A", "B", "C", "C", "C", "E"]
现在,假设我们有另一个列表,其中包含更多列表:
otherList = [["A, "E"], ["A", "B", "C", "C"], ["B", "B"], ["A", "C"]]
我想要做的是otherList
的每个索引,检查每个术语的总和加上所有先前索引的总和,看看每个术语的总量是否超过{{1}的总和。 1}}。
例如:
termList
中存在的一个实例,所以循环结束。如果没有嵌套一百万个循环,我会坚持如何做到这一点。我想我们可以使用生成器表达式termList
和all
的组合,但不能完全弄清楚如何添加所有先前的术语,并检查所有总和是否有效。< / p>
答案 0 :(得分:2)
Counter
对您有用,您可以将它们添加到一起:
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 :(得分:0)
这是家庭作业吗?一种方法是涉及两个词典。迭代第一个列表,并为每个实例将字典值增加1。您的示例的输出将是:{ 'A' : 2, 'B' : 1, 'C': 3, 'E' : 1 }
。接下来迭代其他列表中的每个列表,并使用单独的字典执行相同的操作。输出将是:{ 'A' : 3, 'E' : 1, 'B' : 3, 'C' : 3 }
现在比较您的列表(或者在迭代第二个列表时执行此操作)。您可能还希望使用defaultdict为您的词典返回0作为默认值。这样可以避免因必须考虑关键错误而烦恼。
此句也不清楚你在前面的意思。
检查每个字词的总和加上所有之前索引的总和,看看每个字词的总金额是否超过
termList
。