计算嵌套列表中的元素数量

时间:2014-11-01 21:54:52

标签: python python-2.7 nested-lists

我试图计算嵌套列表中的元素数量,列表如下所示:

[(1944, ['Hughes H']),
 (1940, ['Hill DK', 'Crawford GN', 'Greene HS', 'Myers J', 'Burr GO']),
 (1941,
  ['McClung CE',
   'Sumner FB',
   'Gates RR',
   'Lewis WH',
   'Haas O',
   'Haas O',
   'Gould BS',
   'Tytell AA',
   'Hatch MH']),
 (1942,
  ['Gaffron H',
   'Gardner FT',
   'Edwards PR',
   'Bruner DW',
   'Lake NC',
   'Ratner B',
   'Gaffron H',
   'Rubin J',
   'Ritter WE']),
 (1943,
  ['Bousfield G',
   'Fishbein M',
   'Faber HK',
   'Silverberg RJ',
   'Dong L',
   'Howorth MB'])]

这是用于获取此输出的代码:

d = defaultdict(list)
for k, v in authors_expanded:
        d[k].append(v)

d.items()

使用以下代码可以正常工作并减去一个工作:

len(d.items())-1

由于列表的第一个元素始终包含一个项目。 我正在寻找一个更好的解决方案。

给我一​​个很好的联系也很棒,我似乎无法找到任何自己。

3 个答案:

答案 0 :(得分:0)

你需要的是递归。一个自称的函数。迭代列表时测试类型,如果其另一个列表递归计算其中的项目。看看下面应该做的伎俩。无论有多少嵌套列表,您都可以使用它。您也可以计算嵌套元组和dicts,但如果您不需要测试它们,我会删除它们。

items = ['item1',['item2',['item3','item4']]]

def count_items(items):
    number = 0
    for i in items:
        variable_type = type(i)
        if variable_type is list or variable_type is tuple or variable_type is dict:
            number = number + count_items(i)
        else:
            number = number + 1
    return number

print count_items(items)

答案 1 :(得分:0)

[ len(y) for x,y in your_list ]

输出

[1, 5, 9, 9, 6]

我正在使用x,y对,y是嵌套列表。我使用len函数给出列表中的元素数

答案 2 :(得分:0)

如果您正在寻找每年的作者数量,您可以使用:

# Authors per year
authors_per_year = { year: len(authors) for year, authors in the_list }

给你这个:

{1940: 5, 1941: 9, 1942: 9, 1943: 6, 1944: 1}

或者,如果您要查找唯一作者的计数,那么您可以使用它:

# Unique authors
unique_authors = set([ a for year, authors in the_list 
                           for a in authors])

给你这套:

set(['Bousfield G',
     'Bruner DW',
     'Burr GO',
     'Crawford GN',
     'Dong L',
     'Edwards PR',
     'Faber HK',
     'Fishbein M',
     'Gaffron H',
     'Gardner FT',
     'Gates RR',
     'Gould BS',
     'Greene HS',
     'Haas O',
     'Hatch MH',
     'Hill DK',
     'Howorth MB',
     'Hughes H',
     'Lake NC',
     'Lewis WH',
     'McClung CE',
     'Myers J',
     'Ratner B',
     'Ritter WE',
     'Rubin J',
     'Silverberg RJ',
     'Sumner FB',
     'Tytell AA'])

因此len(unique_authors)会为您提供28的计数。

无论如何,我认为前进的方法可能是使用list comprehensionsdict comprehension的某种组合。