|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Stubborn 于 2018-12-6 22:22 编辑
- c = [[1,2,3], [4,5,6], [7,8,9]]
- >>> [n for a in c for n in a ]
- [1, 2, 3, 4, 5, 6, 7, 8, 9]
复制代码
这个列表属于嵌套
举个例子:
- list1=["羊","狗","牛"]
- list2=['草','狗粮','菜']
- [x+'吃'+y for x in list1 for y in list2]
- ['羊吃草', '羊吃狗粮', '羊吃菜', '狗吃草', '狗吃狗粮', '狗吃菜', '牛吃草', '牛吃狗粮', '牛吃菜']
复制代码
其中 x+"吃"+y,属于新列表的“格式”。而其中的x,y是从后面定义的,x是list1中的每个元素,y是list2中的每个元素,把x中的每个元素循环到list2中,安装“格式”匹配
你还可以这样写[x,x+'吃'+y,y for x in list1 for y in list2]这样会报错,少了一个括号,大中小都是可以,一定不能少。
假如两个列表元素长度不相等怎么办?
重新定义list1=["羊","狗"]
['羊吃草', '羊吃狗粮', '羊吃菜', '狗吃草', '狗吃狗粮', '狗吃菜']
结果来看,长度是否相等不会影响运行
- list1 = [i for i in range(30) if i % 3 is 0]
复制代码
这个例子是不带嵌套的,相信看完前面的例子,这个例子应该就不难判断了。
i属于格式,不用更改,i的值是有range(30)赋予的,if需要这个i需要筛选出你想用的值,比如例子中,是要筛选出,30内属于3的倍数
现在回过头来,分析第一个例子:
- c = [[1,2,3], [4,5,6], [7,8,9]]
- >>> [n for a in c for n in a ]
- [1, 2, 3, 4, 5, 6, 7, 8, 9]
复制代码
首先,我们知道了,最前面的这个n是格式,结果中列表每个值,是由n得来的。那个么n又是怎么样赋值的呢?
分解开来,这样看[表达式 for 变量 in 列表 for 变量 in 列表 ]
- t=[]
- for a in c:
- for n in a:
- t.append(n)
- print(t)
复制代码
看下另外一个例子,“格式”为函数:
- def squared(x):
- return x*x
- multiples = [squared(i) for i in range(30) if i % 3 is 0]
- print multiples
- # 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 我居然在最下面看到的甲鱼,非常有名气哦 |
|