计算嵌套列表中的出现次数

时间:2013-10-23 20:37:24

标签: python list nested

有一些类似的问题,但对python不熟悉我不知道如何将它们结合起来,希望有人可以用正确的方式指出我。

我有一个嵌套列表,说:
nested_list = [["a", "b"], ["c", "d"], ["e", "f"]]
和另一个嵌套列表,其中包含我稍后用于识别的字符串(name1,name2 ...)以及每个字符串(aab,abd,abb ....):
another_list = [["name1", "aab..."], ["name2", "abd..."], ["name3", "abb..."], [....

我需要遍历字符串,首先取每个字符串中的第一个字符并计算它们在nested_list中的次数。因此,取string1中的第一个字符(another_list [0] [1]),string2中的第一个字符(another_list [1] [1])和string3中的第一个字符(another_list [2] [1]),对应到a,a,a,将返回3, 0, 0。相同的结果来自第二个字符,对应于a,b,b。字符串中的第三个字符(对应于b,d,b)将返回2, 1, 0,依此类推,直到到达字符串末尾。
我知道如何计算,例如,某个字符在列表中的次数,但我不确定如何遍历嵌套列表并总结结果。
你们中的任何人能帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,您真的必须学会清楚地表达您的问题,并以可理解的方式格式化代码。目前,在您提供的示例数据/代码的上下文中,您的句子没有意义。

...然而

这可以满足您的需求:

nested_list = [['a', 'b'], ['c', 'd'], ['e', 'f']]
another_list = [['name0', 'aaa'], ['name1', 'aab'], ['name2', 'abd'], ['name3', 'abb']]

result = [tuple(sum(1 for c in s if c in lst)
                for lst in nested_list)
          for _, s in another_list]

result将包含:

[(3, 0, 0), (3, 0, 0), (2, 1, 0), (3, 0, 0)]

最后一部分可以扩展为:

result = []
for _, s in another_list:
    item = ()
    for lst in nested_list:
        count = 0
        for c in s:
            if c in lst:
                count += 1
        item += (count,)
    result.append(item)

但是我建议理解嵌套列表理解(和生成器表达式)形式,而不是求助于长扩展形式。