列表的推导式
代码1:>>> list1 = ['1.just do it','2.=一切皆有可能','3.让编程改变世界','4.impossible is nothing']
>>> list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
>>> list3 = for name in list2 for slogan in list1 if name == slogan]
>>> for each in list3:
print(each)
4.阿迪达斯impossible is nothing
2.李宁=一切皆有可能
3.鱼C工作室让编程改变世界
1.耐克just do it
代码2:
>>> list1 = ['1.just do it','2.一切皆有可能','3.让编程改变世界','4.impossible is nothing']
>>> list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
>>> list3 = for slogan in list1 for name in list2if name == slogan]
>>> for each in list3:
print(each)
1.耐克just do it
2.李宁一切皆有可能
3.鱼C工作室让编程改变世界
4.阿迪达斯impossible is nothing
问:代码1和代码2的区别在于list3,最终导致打印结果不一样。为什么list3的代码顺序不一样会产生这样的结果呢? 可以先试试这段代码
>>> list1 =
>>> list2 =
>>> list3 =
>>> list3
['11', '12', '13', '14', '21', '22', '23', '24', '31', '32', '33', '34', '41', '42', '43', '44']
相当于是for a1 in list1里套了一个for a2 in list2
这段代码同理
例如代码2里
因为是for list1里套了一个for list2
所以先遍历list1
list1遍历到1.just doit时
要直到list2遍历到1.耐克(也就是list2里最后一个元素)时才会打印
后面的代码同理
总之,代码2里就是依次遍历list1,从list2里找匹配的元素打印
代码1里就是依次遍历list2,从list1里找匹配的元素打印 本帖最后由 yhhpf 于 2020-7-1 21:18 编辑
#list3 = for name in list2 for slogan in list1 if name == slogan]
#你把这个独立出来看,用多行来写就是:
list1 = ['1.just do it','2.=一切皆有可能','3.让编程改变世界','4.impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
#-------------------------------------------------------------
list3 = []
for name in list2:
for slogan in list1:
if name == slogan:
list3.append(name + slogan)
for each in list3:
print(each)
#list3 = for slogan in list1 for name in list2if name == slogan]
#同样这个也独立出来看,用多行来写就是:
list1 = ['1.just do it','2.=一切皆有可能','3.让编程改变世界','4.impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
#-------------------------------------------------------------
list3 = []
for slogan in list1:
for name in list2:
if name == slogan:
list3.append(name + slogan)
for each in list3:
print(each)
相当于两个循环嵌套使用,比如两个循环,单独执行结果是:
循环name结果是:1A,2B,3C,4D
循环slogan结果是4d,3c,2b,1a
而当嵌套使用时,会先执行外层循环1次,而外层执行1次内层的就会全部执行,即假设先执行name ,slogan在name内;
那外层name执行1次时:结果是1A,4d,3c,2b,1a,外层1次,内层全部执行。
所以当判断语句if name == slogan 执行后,最后所有循环跑完的结果就是
相对的,如果slogan在外层,则:
外层slogan执行1次时:结果是4d,1A,2B,3C,4D,即同样外层slogan执行1次时,内层全部执行;
所以当判断语句if name == slogan 执行后,最后所有循环跑完的结果就是
嵌套函数被调用时,先执行外部函数,再执行内部函数是吗?但是嵌套不是都有个def吗 本帖最后由 Twilight6 于 2020-7-1 21:19 编辑
生存不易 发表于 2020-7-1 21:03
嵌套函数被调用时,先执行外部函数,再执行内部函数是吗?但是嵌套不是都有个def吗
这个不是函数哈,应该称为循环,叫做嵌套循环,嵌套循环时,先执行外部循环,然后再执行内部的循环,内部循环执行完毕后,开始下一次的外部循环
这里顺序不同主要是因为 每次 for 循环都要将内部的代码全部执行完,才开始下一次最外部的循环导致的,加上你最外层第一个是循环 list2,第二个是循环 list1,循环的列表不同导致的
这里内部还有一个 for 循环 所以,外部 for 循环过程中,要将内部全部循环完然只有满足 if 的条件就进行拼接
而且一个是先循环list3 = for name in list2 for slogan in list1 if name == slogan]
另一个是 :list3 = for slogan in list1 for name in list2if name == slogan]
循环过程是按照顺序循环下去的,所以导致第一个代码是循环字符串编号的顺序是 4、2、3、1
>>> list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
而第二个代码循环字符串编号的顺序是 1、2、3、 4
>>> list1 = ['1.just do it','2.=一切皆有可能','3.让编程改变世界','4.impossible is nothing']
所以导致你最后结果顺序的不同
页:
[1]