xuexiXX 发表于 2021-3-22 09:51:02

零基础入门学习python第12讲课后作业

https://xxx.ilovefishc.com/forum/201310/12/044035qddrqkmrqod4cqmr.png

这是小甲鱼课后的一道题
我虽然自己写出了答案 但是和小甲鱼的方法看起来完全不同 而且我甚至没看明白小甲鱼在干什么 name slogan都是什么意思呢?
麻烦大家了,谢谢!

小甲鱼的答案
>>> list3 = for slogan in list1 for name in list2 if slogan == name]
我的答案
list3=+':'+list2,list1+':'+list2,list1+':'+list2,list1+':'+list2]

柿子饼同学 发表于 2021-3-22 10:00:35

name,slogan完全可以换成别的,这个不碍事,就像i,j一样

qq1151985918 发表于 2021-3-22 10:02:55

本帖最后由 qq1151985918 于 2021-3-22 10:04 编辑

如果楼主的列表有100个元素楼主准备用手打100个并且用眼睛甄别?那要是10000个元素呢?
小甲鱼是把代码写成了一行,其实list3 = for slogan in list1 for name in list2 if slogan == name]
相当于list3 = []
for slogan in list1:
    for name in list2:
      if slogan == name:
            list3.append(name + ':' + slogan)
这样你就看得懂了,意思就是 如果slogan的序号等于 name的序号,就把他们以 name + ':' + slogan 形式组合到一起添加到新列表 list3

柿子饼同学 发表于 2021-3-22 10:07:28

本帖最后由 柿子饼同学 于 2021-3-22 10:14 编辑

这是列表推导式, for slogan in list1 for name in list2 if slogan == name]
等价于>>> list1 = ['1.J...', '2.Y...', '3.R...', '4.I...']
>>> list2 = ['4.A..', '2.L..', '3.Y..', '1.N..']
>>> list3 = []
>>> for slogan in list1:
        for name in list2:
                if slogan == name:
                        list3.append(name + ':' + slogan)

>>> list3
['1.N..:J', '2.L..:Y', '3.Y..:R', '4.A..:I']
>>>
         

Peteryo01223 发表于 2021-3-22 11:07:59

本帖最后由 Peteryo01223 于 2021-3-22 11:30 编辑

小甲鱼的答案是:
list3 = for slogan in list1 for name in list2 if slogan == name]
他表达了三层意思,我帮助解释一下:
1. slogan 就是 list1 当中的每一个对象,name 就是 list2 当中的每一个对象;
2. 需要满足的条件是当:某个 slogan 的第一个位置的str 等于 某个 name 的第一个位置的str,在本题中,即:序号值相同;
3. 输出时,name 写在前,加上,从第三个位置开始的 slogan 的内容。
比对你的答案:一一列举出来,固然也可以,但如遇到内容更多的时候,就明显不如他的“内部临时变量 name 和 slogan”的表达方式简洁了。

xuexiXX 发表于 2021-3-22 21:13:39

qq1151985918 发表于 2021-3-22 10:02
如果楼主的列表有100个元素楼主准备用手打100个并且用眼睛甄别?那要是10000个元素呢?
小甲鱼是把代码写 ...

明白了谢谢
页: [1]
查看完整版本: 零基础入门学习python第12讲课后作业