鱼C论坛

 找回密码
 立即注册
查看: 2721|回复: 15

[已解决]求助第12讲作业 使用列表推导式补充被小甲鱼不小心涂掉的部分

[复制链接]
发表于 2019-5-8 01:01:57 | 显示全部楼层 |阅读模式

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

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

x



044035qddrqkmrqod4cqmr.png



>>> list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]

我不太理解为什么这个代码能够把涂掉的东西找出来,看了半天看不懂,求大神指教。如何分行写代码如何写。
谢谢了先。
最佳答案
2019-5-8 08:50:20
for slogan in list20:
    for name in list21:
        if slogan[0] == name[0]:
            print(name + ':' + slogan[2:])
if slogan[0] == name[0]的话,(也就是两个列表中每个元素的第0个索引值结果相等的话(每个元素中开头的"0"、“1”“2”之类的)),

if这个作用其实就是判断两个列表中每个元素中开头字符是否相等。

将name + ':' + slogan[2:]append进list22列表。(name这里指的是list21中的每个元素,slogan这里指的是list20中的每个元素)

slogan[2:]指的是slogan去掉前面两个元素之后的所有内容。例如"1.Just do it'",去掉头两个元素结果就是“Just do it ”.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-8 01:21:51 | 显示全部楼层

继续求助问题二

>>> x, y, z = 1, 2, 3
>>> type(x)

返回的是 int

鱼C说 所有的多对象的、逗号分隔的、没有明确用符号定义的这些集合默认的类型都是元组
这里 X Y Z 是整数 还是元组 如果是元组为什么没有返回 tuple ?
谢谢指教。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-8 08:11:48 | 显示全部楼层
请参考这个帖子:戳我前进
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-8 08:14:06 | 显示全部楼层
Ostaraweg 发表于 2019-5-8 01:21
继续求助问题二

>>> x, y, z = 1, 2, 3


x、y、z是整数,不是元祖。

x=1,的话,x就是元祖。

逗号是元祖的标志,你上面那个算是多重赋值而已。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-8 08:18:35 From FishC Mobile | 显示全部楼层
问题2,解包赋值,都赋值了,x的类型对应包中值的类型,包中是神马类型,x就是神马类型
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-5-8 08:24:44 From FishC Mobile | 显示全部楼层
问题1,是带有筛选条件的列表推导式,最后,构成个字典。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-5-8 08:50:20 | 显示全部楼层    本楼为最佳答案   
for slogan in list20:
    for name in list21:
        if slogan[0] == name[0]:
            print(name + ':' + slogan[2:])
if slogan[0] == name[0]的话,(也就是两个列表中每个元素的第0个索引值结果相等的话(每个元素中开头的"0"、“1”“2”之类的)),

if这个作用其实就是判断两个列表中每个元素中开头字符是否相等。

将name + ':' + slogan[2:]append进list22列表。(name这里指的是list21中的每个元素,slogan这里指的是list20中的每个元素)

slogan[2:]指的是slogan去掉前面两个元素之后的所有内容。例如"1.Just do it'",去掉头两个元素结果就是“Just do it ”.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-5-8 14:11:19 | 显示全部楼层
heidern0612 发表于 2019-5-8 08:11
请参考这个帖子:戳我前进

最佳答案 月排行榜 / 总排行榜
heidern06122018-12-23 09:43:23
本帖最后由 heidern0612 于 2018-12-23 09:46 编辑


要看懂这个首先你要明白list22中的列表引导式表达的意义。

list22 = [name + ':' + slogan[2:] for slogan in list20 for name in list21 if slogan[0] == name[0]]


首先看 for slogan in list20 和 for name in list21两句,


这两个句比较简单,就是个二维的列表遍历,遍历了两个列表中的每一个元素。

(二维的的列表遍历可以想象下班级座位,每一行每一排,也可以参考佳宇老师那个摸三色球的问题。)

下面一句if slogan[0] == name[0]的话,(也就是两个列表中每个元素的第0个索引值结果相等的话(每个元素中开头的"0"、“1”“2”之类的)),

if这个作用其实就是判断两个列表中每个元素中开头字符是否相等。

将name + ':' + slogan[2:]append进list22列表。(name这里指的是list21中的每个元素,slogan这里指的是list20中的每个元素)

slogan[2:]指的是slogan去掉前面两个元素之后的所有内容。例如"1.Just do it'",去掉头两个元素结果就是“Just do it ”.
上面理解了之后,下面for循环打印list22中的每个元素就比较好理解了。



-------------------------------------------------------------------------------------------------------------------
谢谢
Heidern0612的解释。 我把解释复制到上面了。

还有2个问题是
1 什么时候定义name slogan 为列表了 ?

2 slogan[2:]指的是slogan去掉前面两个元素之后的所有内容。例如"1.Just do it'",去掉头两个元素结果就是“Just do it ”.
“1.Just do it ” 是一个字符串,它的头两个元素就是头两个字符 我一直以为 只要连着的就是一个元素。譬如一共有三个 1.Just---- do----- it
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-8 15:08:09 | 显示全部楼层
Ostaraweg 发表于 2019-5-8 14:11
最佳答案 月排行榜 / 总排行榜
heidern06122018-12-23 09:43:23
本帖最后由 heidern0612 于 2018-12-23 ...

1、for循环的时候就定义了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-8 15:17:10 | 显示全部楼层
pwfpwfpwf 发表于 2019-5-8 08:50
for slogan in list20:
    for name in list21:
        if slogan[0] == name[0]:

谢谢回复。
主要是奇怪slogan name 两个变量没有定义。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-8 15:27:37 | 显示全部楼层
kaohsing 发表于 2019-5-8 08:18
问题2,解包赋值,都赋值了,x的类型对应包中值的类型,包中是神马类型,x就是神马类型

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-8 16:14:33 | 显示全部楼层
本帖最后由 Ostaraweg 于 2019-5-8 16:17 编辑

又一个问题
输入
>>>*A, = (1,2)
>>>A
[1, 2]

已经告诉机器A是元组 但输入 A仍然返回列表 是怎么一回事

谢谢指教!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-8 17:26:17 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-9 12:50:53 | 显示全部楼层
你把list3涂掉了,
但是你的each在list3里面啊
  1. for each in list3:
  2.     print(each)
复制代码


你输出的each是在list3里面啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-10 07:52:11 | 显示全部楼层
Ostaraweg 发表于 2019-5-8 15:17
谢谢回复。
主要是奇怪slogan name 两个变量没有定义。

for slogan in list20:
    for name in list21:


for循环的时候就已经定义了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-11 22:08:10 | 显示全部楼层
破月霜华 发表于 2019-5-9 12:50
你把list3涂掉了,
但是你的each在list3里面啊

谢回复
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 21:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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