计算嵌套列表中的元素数量
我正在尝试计算一个嵌套列表中的元素数量,这个列表看起来是这样的:
[(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
你需要用到递归。也就是一个函数可以自己调用自己。在遍历列表的时候,检查每个元素的类型,如果它是另一个列表,就递归地计算里面的元素数量。下面的代码应该能帮到你。这种方法无论有多少层嵌套的列表,或者需要深入多少层都能有效工作。你也可以计算嵌套的元组和字典,不过如果你不需要检查它们,可以把相关的部分去掉。
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)
0
[ len(y) for x,y in your_list ]
输出
[1, 5, 9, 9, 6]
我正在处理一对坐标 x 和 y,其中 y 是一个嵌套列表。我使用 len
函数来计算列表中的元素数量。
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
。