python的函数问题
编写一个函数,common(list1, list2),它返回一个字典。 字典中的每个键对应两个列表中的一个元素。 每个键的值是该元素在两个列表中出现的次数。 有关示例,请参阅下面的测试单元。assert common(["a", "b", "a", "d", "f", "a"], ["a", "b", "d", "d", "e"]) == { "a": 4, "b": 2, "d": 3 }
提示:有多种方法可以解决此问题,但您可能会发现最简单的方法是构建至少两个中间字典和多个循环。
def common(list1, list2):
s = {}
for i in list1:
if i in s:
s += 1
else:
s = 1
for i in list2:
if i in s:
s += 1
else:
s = 1
return s
print(common(["a", "b", "a", "d", "f", "a"], ["a", "b", "d", "d", "e"]))
def common(list1, list2):
s = {}
for i in list1:
if i in s:
s += 1
else:
s = 1
for i in list2:
if i in s:
s += 1
else:
s = 1
return s
print(common(["a", "b", "a", "d", "f", "a"], ["a", "b", "d", "d", "e"]))
def common(list1, list2):
list3 = list1 + list2
s = {}
for i in list3:
if i in s:
s += 1
else:
s = 1
return s
print(common(["a", "b", "a", "d", "f", "a"], ["a", "b", "d", "d", "e"])) 简单明了:
def clac(list1,list2):
list1.extend(list2)
new_list = list(set(list1))
result = {}
for n in new_list:
result = list1.count(n)
return result
print(clac(,)) 再给你个进阶版的,不限制输入了几个列表,一个也行一百个也行。
def clac(*lists):
_list = []
for each in lists:
_list.extend(each)
not_repeat = set(_list)
result = {}
for n in not_repeat:
result = _list.count(n)
return result
print(clac(,)) def common(list1, list2):
return {i:(list1+list2).count(i) for i in set(list1+list2)}
{:10_245:} qq1151985918 发表于 2021-6-24 15:26
我靠,字典推导式
def common(ls1, ls2):
return { i : (ls1+ls2).count(i) for i in ls1+ls2 if (i in ls1) and (i in ls2)}
# 注:从示例看出,是要两个列表共有的元素,故 if 判断一下。
或你转为集合取交集,如 {i:(list1+list2).count(i) for i in (set(list1) & set(list2))} 以上使用 .count() 的代码全都效率爆炸,个人认为2#代码比较好 永恒的蓝色梦想 发表于 2021-6-25 10:38
以上使用 .count() 的代码全都效率爆炸,个人认为2#代码比较好
玩c 语言的大佬看问题的角度就是不一样,顺便请教下 .count 和 if ... in ... 的执行原理 nahongyan1997 发表于 2021-6-25 11:06
玩c 语言的大佬看问题的角度就是不一样,顺便请教下 .count 和 if ... in ... 的执行原理
并不是大佬,也是初学者而已
list 的 .count 和 in 其实就相当于这样def count(list, val):
result = 0
for i in list:
if i == val:
result += 1
return resultdef __contain__(list, val):
for i in list:
if i == val:
return True
return False def common(list1,list2):
countDict = {}
for i in (list1+list2):
countDict = countDict.get(i,0)+1
return countDict 夜莫 发表于 2021-6-27 00:04
def common(list1,list2):
countDict = {}
for i in (list1+list2):
新奇 nahongyan1997 发表于 2021-6-27 09:28
新奇
代码讲究效率
6666我也不知道呀
页:
[1]