鱼C论坛

 找回密码
 立即注册
查看: 1460|回复: 5

一个棘手的列表问题

[复制链接]
发表于 2021-6-20 11:11:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
a  b  c 为三个列表变量
求 a b c 列表中的相同项组成个新列表。但是a  b  c有可能为空列表[].如果a  b c 其中某项为空列表则不参与相同项的计算。
用列表生成式该如何写?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-20 11:16:01 | 显示全部楼层
举个例子,题目没太明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-20 11:20:02 | 显示全部楼层
qq1151985918 发表于 2021-6-20 11:16
举个例子,题目没太明白


如a=[1 , 2 , 3]   b=[2,3]  c=[3]
那么生成的列表为[3]。。假如c=[] ,那么c不参与计算,生成的新列表为[2,3].
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-20 11:46:36 | 显示全部楼层
话说你为什么非要用列表生成式呢?多麻烦
>>> a = [1,2,3]
>>> b = [2,3]
>>> c = [3]
>>> [son_a for son_a in (a if a else (lambda x,y:x if x else y)(b,c)) for son_b in (b if b else (lambda x,y:x if x else y)(a,c)) for son_c in (c if c else (lambda x,y:x if x else y)(b,a)) if son_a == son_b == son_c]
[3]
>>> c = []
>>> [son_a for son_a in (a if a else (lambda x,y:x if x else y)(b,c)) for son_b in (b if b else (lambda x,y:x if x else y)(a,c)) for son_c in (c if c else (lambda x,y:x if x else y)(b,a)) if son_a == son_b == son_c]
[2, 3]
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2021-6-20 12:51:01 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2021-6-20 13:17 编辑

集合是个好东西
>>> a = [1,2,3]
>>> b = [2,3]
>>> c = [3]
>>> d = [ans for ans in [
        [set(each) for each in [a,b,c]
         if each][0].intersection(item) for item in [
                set(each) for each in [a,b,c]
                if each]
        ][-1]
     ]
>>> d
[3]
>>> c = []
>>> d = [ans for ans in [
        [set(each) for each in [a,b,c]
         if each][0].intersection(item) for item in [
                set(each) for each in [a,b,c]
                if each]
        ][-1]
     ]
>>> d
[2, 3]
>>> 
这好像只是这个示例的特解,不是通解


这样就好多了
>>> a = [1,2,3]
>>> b = [2,3]
>>> c = [3]
>>> temp = [
        set(each) for each in [a,b,c]
        if each
        ]
>>> d = [item for item in (set() if len(temp)==0
                       else
                       temp[0] if len(temp)==1
                       else
                       temp[0].intersection(temp[1]) if len(temp)==2
                       else
                       temp[0].intersection(temp[1]).intersection(temp[2])
                       )
     ]
>>> d
[3]
>>> c = []
>>> temp = [
        set(each) for each in [a,b,c]
        if each
        ]
>>> d = [item for item in (set() if len(temp)==0
                       else
                       temp[0] if len(temp)==1
                       else
                       temp[0].intersection(temp[1]) if len(temp)==2
                       else
                       temp[0].intersection(temp[1]).intersection(temp[2])
                       )
     ]
>>> d
[2, 3]
>>> c = [1,3]
>>> temp = [
        set(each) for each in [a,b,c]
        if each
        ]
>>> d = [item for item in (set() if len(temp)==0
                       else
                       temp[0] if len(temp)==1
                       else
                       temp[0].intersection(temp[1]) if len(temp)==2
                       else
                       temp[0].intersection(temp[1]).intersection(temp[2])
                       )
     ]
>>> d
[3]
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-4 22:11:24 | 显示全部楼层
a = [4]
b = [1, 2, 3, 4]
c = [3, 4, 5]
arr = None

if a and b and c:
    arr = [i for i in a if (i in b) and (i in c)]

print(arr)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 13:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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