鱼C论坛

 找回密码
 立即注册
查看: 1109|回复: 1

[技术交流] 知识点随记----python推导式

[复制链接]
发表于 2018-12-6 22:19:50 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Stubborn 于 2018-12-6 22:22 编辑
  1.     c = [[1,2,3], [4,5,6], [7,8,9]]
  2.     >>> [n for a in c for n in a ]
  3.     [1, 2, 3, 4, 5, 6, 7, 8, 9]
复制代码

这个列表属于嵌套
举个例子:

  1. list1=["羊","狗","牛"]
  2. list2=['草','狗粮','菜']
  3. [x+'吃'+y for x in list1 for y in list2]
  4. ['羊吃草', '羊吃狗粮', '羊吃菜', '狗吃草', '狗吃狗粮', '狗吃菜', '牛吃草', '牛吃狗粮', '牛吃菜']
复制代码

其中  x+"吃"+y,属于新列表的“格式”。而其中的x,y是从后面定义的,x是list1中的每个元素,y是list2中的每个元素,把x中的每个元素循环到list2中,安装“格式”匹配
你还可以这样写[x,x+'吃'+y,y for x in list1 for y in list2]这样会报错,少了一个括号,大中小都是可以,一定不能少。
假如两个列表元素长度不相等怎么办?
重新定义list1=["羊","狗"]
['羊吃草', '羊吃狗粮', '羊吃菜', '狗吃草', '狗吃狗粮', '狗吃菜']
结果来看,长度是否相等不会影响运行

  1. list1 = [i for i in range(30) if i % 3 is 0]
复制代码

这个例子是不带嵌套的,相信看完前面的例子,这个例子应该就不难判断了。
i属于格式,不用更改,i的值是有range(30)赋予的,if需要这个i需要筛选出你想用的值,比如例子中,是要筛选出,30内属于3的倍数

现在回过头来,分析第一个例子:
  1.     c = [[1,2,3], [4,5,6], [7,8,9]]
  2.     >>> [n for a in c for n in a ]
  3.     [1, 2, 3, 4, 5, 6, 7, 8, 9]
复制代码

首先,我们知道了,最前面的这个n是格式,结果中列表每个值,是由n得来的。那个么n又是怎么样赋值的呢?
分解开来,这样看[表达式 for 变量 in 列表  for 变量 in 列表 ]

  1. t=[]
  2. for a in c:
  3.     for n in a:
  4.         t.append(n)
  5. print(t)
复制代码

看下另外一个例子,“格式”为函数:

  1. def squared(x):
  2.     return x*x
  3. multiples = [squared(i) for i in range(30) if i % 3 is 0]
  4. print multiples
  5. #  Output: [0, 9, 36, 81, 144, 225, 324, 441, 576, 729]
复制代码



is_palindrome(n, start+1, end-1) if n[start] == n[end] else 0
-------------------------总结--------------------------------
variable = [out_exp_res for out_exp in input_list if out_exp == 2]
[表达式 for 变量 in 列表]  或者[表达式 for 变量 in 列表  for 变量 in 列表 ]或者  [表达式 for 变量 in 列表 if 条件]
  out_exp_res:  列表生成元素表达式,可以是有返回值的函数。
  for out_exp in input_list:  迭代input_list将out_exp传入out_exp_res表达式中。
  if out_exp == 2:  根据条件过滤哪些值可以。

个人觉得就这样了。如果还有不懂的。可以参考下面这个链接:https://www.cnblogs.com/loved/p/8671149.html   我居然在最下面看到的甲鱼,非常有名气哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-10 00:14:58 | 显示全部楼层
初看列表推导式确实很繁琐,不过看久了就很喜欢了。可以去每日一题里看塔利班每期写的答案,塔利班疯狂用列表推导式,很有美感。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 22:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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