鱼C论坛

 找回密码
 立即注册
查看: 3253|回复: 16

[已解决]python的函数问题

[复制链接]
发表于 2021-6-24 13:21:18 | 显示全部楼层 |阅读模式
10鱼币
编写一个函数,common(list1, list2),它返回一个字典。 字典中的每个键对应两个列表中的一个元素。 每个键的值是该元素在两个列表中出现的次数。 有关示例,请参阅下面的测试单元。

assert common(["a", "b", "a", "d", "f", "a"], ["a", "b", "d", "d", "e"]) == { "a": 4, "b": 2, "d": 3 }

提示:有多种方法可以解决此问题,但您可能会发现最简单的方法是构建至少两个中间字典和多个循环。
最佳答案
2021-6-24 13:21:19


def common(list1, list2):
    s = {}
    for i in list1:
        if i in s:
            s[i] += 1
        else:
            s[i] = 1
    for i in list2:
        if i in s:
            s[i] += 1
        else:
            s[i] = 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"]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 13:21:19 | 显示全部楼层    本楼为最佳答案   


def common(list1, list2):
    s = {}
    for i in list1:
        if i in s:
            s[i] += 1
        else:
            s[i] = 1
    for i in list2:
        if i in s:
            s[i] += 1
        else:
            s[i] = 1
    return s

print(common(["a", "b", "a", "d", "f", "a"], ["a", "b", "d", "d", "e"]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 13:49:17 | 显示全部楼层
def common(list1, list2):
    s = {}
    for i in list1:
        if i in s:
            s[i] += 1
        else:
            s[i] = 1
    for i in list2:
        if i in s:
            s[i] += 1
        else:
            s[i] = 1
    return s

print(common(["a", "b", "a", "d", "f", "a"], ["a", "b", "d", "d", "e"]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 13:52:47 | 显示全部楼层
def common(list1, list2):
    list3 = list1 + list2
    s = {}
    for i in list3:
        if i in s:
            s[i] += 1
        else:
            s[i] = 1
    return s

print(common(["a", "b", "a", "d", "f", "a"], ["a", "b", "d", "d", "e"]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 13:53:20 | 显示全部楼层
简单明了:
def clac(list1,list2):
    list1.extend(list2)
    new_list = list(set(list1))
    result = {}
    for n in new_list:
        result[n] = list1.count(n)
        
    return result


print(clac([123],[123]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 14:09:29 | 显示全部楼层
再给你个进阶版的,不限制输入了几个列表,一个也行一百个也行。
def clac(*lists):
    _list = []
    for each in lists:
        _list.extend(each)
        
    not_repeat = set(_list)
    result = {}
    for n in not_repeat:
        result[n] = _list.count(n)
        
    return result


print(clac([123,1233],[123]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 15:26:38 | 显示全部楼层
def common(list1, list2):
      return {i:(list1+list2).count(i) for i in set(list1+list2)}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-24 18:43:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 20:41:06 | 显示全部楼层

我靠,字典推导式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 23:19:03 | 显示全部楼层
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))}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-25 10:38:11 | 显示全部楼层
以上使用 .count() 的代码全都效率爆炸,个人认为2#代码比较好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-25 11:06:55 | 显示全部楼层
永恒的蓝色梦想 发表于 2021-6-25 10:38
以上使用 .count() 的代码全都效率爆炸,个人认为2#代码比较好

玩c 语言的大佬看问题的角度就是不一样,顺便请教下 .count 和 if ... in ... 的执行原理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-25 11:16:58 | 显示全部楼层
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 result
def __contain__(list, val):
    for i in list:
        if i == val:
            return True
    return False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 00:04:02 | 显示全部楼层
def common(list1,list2):
    countDict = {}
    for i in (list1+list2):
        countDict[i] = countDict.get(i,0)+1
    return countDict
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 09:28:53 | 显示全部楼层
夜莫 发表于 2021-6-27 00:04
def common(list1,list2):
    countDict = {}
    for i in (list1+list2):

新奇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 11:52:13 | 显示全部楼层

代码讲究效率
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 14:35:15 | 显示全部楼层
6666我也不知道呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 07:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表