Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算嵌套列表中的元素数_Python_Python 2.7_Nested Lists - Fatal编程技术网

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

Python 计算嵌套列表中的元素数,python,python-2.7,nested-lists,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',

我正在尝试计算嵌套列表中的元素数,列表如下所示:

[(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
因为列表的第一个元素总是包含一个项目。 我在寻找更好的解决办法


提供一个好的链接也很好,我自己似乎找不到任何链接。

您需要的是递归。调用自身的函数。在遍历列表时测试该类型,以及它的另一个列表是否递归地计算其中的项。看一看下面应该做的把戏。无论嵌套列表的数量有多大,或者需要深入到多深,这都会起作用。您还可以计算嵌套元组和dict,尽管如果您不需要测试它们,我会删除它们

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, 5, 9, 9, 6]

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

如果您要查找每年的作者数量,可以使用以下方法:

# Authors per year
authors_per_year = { year: len(authors) for year, authors in the_list }
# Unique authors
unique_authors = set([ a for year, authors in the_list 
                           for a in authors])
给你这个:

{1940: 5, 1941: 9, 1942: 9, 1943: 6, 1944: 1}
或者,如果您正在寻找一些独特的作者,那么您可以使用:

# Authors per year
authors_per_year = { year: len(authors) for year, authors in the_list }
# 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(独特的作者)
给你一个
28
的计数


在任何情况下,我认为你的前进方向可能是使用或的一些组合。

你希望这个例子的结果是什么?数一数什么?你字典里的词条有多少?这将是直接
len(d)
,无需调用
d.items()
。你能解释一下
len(d.items())-1
是如何得到你需要的答案的吗?