鱼C论坛

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

一个棘手的列表问题

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

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

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

x
a  b  c 为三个列表变量
求 a b c 列表中的相同项组成个新列表。但是a  b  c有可能为空列表[].如果a  b c 其中某项为空列表则不参与相同项的计算。
用列表生成式该如何写?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-6-20 11:16:01 | 显示全部楼层
举个例子,题目没太明白
小甲鱼最新课程 -> https://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].
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-20 11:46:36 | 显示全部楼层
话说你为什么非要用列表生成式呢?多麻烦
  1. >>> a = [1,2,3]
  2. >>> b = [2,3]
  3. >>> c = [3]
  4. >>> [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]
  5. [3]
  6. >>> c = []
  7. >>> [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]
  8. [2, 3]
  9. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

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

集合是个好东西
  1. >>> a = [1,2,3]
  2. >>> b = [2,3]
  3. >>> c = [3]
  4. >>> d = [ans for ans in [
  5.         [set(each) for each in [a,b,c]
  6.          if each][0].intersection(item) for item in [
  7.                 set(each) for each in [a,b,c]
  8.                 if each]
  9.         ][-1]
  10.      ]
  11. >>> d
  12. [3]
  13. >>> c = []
  14. >>> d = [ans for ans in [
  15.         [set(each) for each in [a,b,c]
  16.          if each][0].intersection(item) for item in [
  17.                 set(each) for each in [a,b,c]
  18.                 if each]
  19.         ][-1]
  20.      ]
  21. >>> d
  22. [2, 3]
  23. >>>
复制代码

这好像只是这个示例的特解,不是通解


这样就好多了
  1. >>> a = [1,2,3]
  2. >>> b = [2,3]
  3. >>> c = [3]
  4. >>> temp = [
  5.         set(each) for each in [a,b,c]
  6.         if each
  7.         ]
  8. >>> d = [item for item in (set() if len(temp)==0
  9.                        else
  10.                        temp[0] if len(temp)==1
  11.                        else
  12.                        temp[0].intersection(temp[1]) if len(temp)==2
  13.                        else
  14.                        temp[0].intersection(temp[1]).intersection(temp[2])
  15.                        )
  16.      ]
  17. >>> d
  18. [3]
  19. >>> c = []
  20. >>> temp = [
  21.         set(each) for each in [a,b,c]
  22.         if each
  23.         ]
  24. >>> d = [item for item in (set() if len(temp)==0
  25.                        else
  26.                        temp[0] if len(temp)==1
  27.                        else
  28.                        temp[0].intersection(temp[1]) if len(temp)==2
  29.                        else
  30.                        temp[0].intersection(temp[1]).intersection(temp[2])
  31.                        )
  32.      ]
  33. >>> d
  34. [2, 3]
  35. >>> c = [1,3]
  36. >>> temp = [
  37.         set(each) for each in [a,b,c]
  38.         if each
  39.         ]
  40. >>> d = [item for item in (set() if len(temp)==0
  41.                        else
  42.                        temp[0] if len(temp)==1
  43.                        else
  44.                        temp[0].intersection(temp[1]) if len(temp)==2
  45.                        else
  46.                        temp[0].intersection(temp[1]).intersection(temp[2])
  47.                        )
  48.      ]
  49. >>> d
  50. [3]
  51. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  7. print(arr)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 20:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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