python - 涉及列表和字典的程序
问题描述
给定一个二维列表,例如[ [2,3],[3,4],[5]]
人 2 是朋友 3 等,找出每个人有多少朋友。注意,一个人没有朋友
我的代码:
def find_friends(last):
dct = {}
for i in range(len(last)):
element = lst[i][0]
if len(lst[i]) != 1:
dct[element] = dct.get(element,0) + 1
else:
dct[element] = 0
return dct
我得到的输出:
lst = ([2,3],[3,4],[5])
print(find_friends(last));
{2: 1, 3: 1, 5: 0}
预期输出:
{2:1, 3:2, 5:0}
解决方案
您需要遍历主列表的每个元素的所有元素(即,如果 A 与 B 是朋友,那么 B 也是 A 的朋友):
def find_friends(lst):
dct = {}
for i in range(len(lst)):
for element in lst[i]:
if len(lst[i]) != 1:
dct[element] = dct.get(element,0) + 1
else:
dct[element] = 0
return dct
>>> lst = ([2,3],[3,4],[5])
>>> print(find_friends(lst))
{2: 1, 3: 2, 4: 1, 5: 0}
使您的代码更优雅的小改进 - 不要迭代索引范围,而是迭代列表本身:
def find_friends(lst):
dct = {}
for element1 in lst:
for element2 in element1:
if len(element1) != 1:
dct[element2] = dct.get(element2,0) + 1
else:
dct[element2] = 0
return dct