发布网友 发布时间:2023-11-19 04:10
共4个回答
热心网友 时间:2024-03-09 13:55
我很理解你的疑惑,我相信这个对任何一个第一次接触到这种写法的人都有疑惑,不过我已经明白它的执行顺序,其实最容易明白的就是写一个等效写法,“a in b for b in c”的写法跟“x for x in y”的写法并没有本质上的区别,只不过前者输出的b又作为“in”的参数继续运算一次而已(同理它还可以是其它运算,未必是a in b,只不过现在它是一个列表,如果c是一维的列表,那循环一次出来的b就是单个元素,假设它是数字,那就可以执行比如b+1 for b in c这种操作),这种一般都用于生成一个列表,说再多不如举个例子(以下例子皆为实测通过):
```
# 二维数组(在python中这个叫列表)
c = [[7, 8, 9], [1, 2, 3], [4, 5, 6]]
# 简易写法,结果: [7, 8, 9, 1, 2, 3, 4, 5, 6]
l1 = [a for b in c for a in b]
print(l1)
# 常规写法(相当于上边的简易写法),结果: [7, 8, 9, 1, 2, 3, 4, 5, 6]
l2 = []
for b in c:
for a in b:
l2.append(a)
print(l2)
# 上述的a还可以作为参数继续传入其它函数或在表达式中使用,比如作为in的参数,结果: [False, True, False]
# 解释一下执行顺序:先执行for in,循环一次就出来一个b,然后再执行num in b,num in b的结果(True/False)作为列表的
# 一个元素,至此一个循环结束,然后又开始下一个for in循环,直到所有元素循环完,最后产生一个元素值为True/False组成的列表!
num = 3
l3 = [num in b for b in c]
print(l3)
# 上面写法相当于
l4 = []
for b in c:
l4.append(num in b)
print(l4)
# a在表达式中参与表达式运算
# 结果:[8, 9, 10, 2, 3, 4, 5, 6, 7]
l5 = [a+1 for b in c for a in b]
print(l5)
# 该写法是上述写法的常规写法
l6 = []
for b in c:
for a in b:
l6.append(a+1)
print(l6)
```
提交答案后,发现百度会把空格缩进全都去掉,而缩进作为python的灵魂,没有了缩进的python代码根本没办法运行,所以我给你截个图,你复制代码后自己去缩进吧:
又一次修改答案,这次我要吐槽一下,不要来这里问关于代码的问题,前面的代码你也看到了,百度知道根本无法嵌入代码,直接把代码当普通文本,空格缩进全给你去掉,然后我想着,好,文本的空格被你去掉我上传图片总行了吧?结果,这图片被压缩的模糊不清,勉强能看见,将就着看吧。
热心网友 时间:2024-03-09 13:55
这个和x for x in y没什么区别
在迭代c的时候,分别是b里面找a。这个应该是一个列表生成式,结果是false或者true的一个list
如图
热心网友 时间:2024-03-09 13:56
for a in c,循环遍历c中的元素,保存在变量a中。热心网友 时间:2024-03-09 13:56
in是成员运算符。这个语句中第一个in是对a 是否b成员进行判断;第二个in是列表推导式的语法中的结构,依次迭代C对象元素到a这个变量上。