鱼C论坛

 找回密码
 立即注册
查看: 2028|回复: 11

[已解决]第012讲——列表推导式里的疑问

[复制链接]
发表于 2017-11-30 20:35:17 | 显示全部楼层 |阅读模式

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

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

x
list3 = [name+':'+ slogan[2:]] 。 我的疑问是按照这行代码确实可以输出最后的正确结果,但是 slogan[2:] 就相当于从第三个位置启示到最后嘛?

那slogan就相当于是list1 = ['1.Just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothing'] ,
其中0号位置是 1.Just do it
1号位置:2.一切皆有可能
2号位置:3.让编程改变世界
3号位置:4.Impossible is Nothing

按照 list3 = [name+':'+ slogan[2:]],在0号位置中'1.Just do it' 的这个字符串又给分了3个位置。

在'1.Just do it'  里,
0号位置 是 1
1号位置 是 .
2号位置是 Just do it

如果我的list3 改成,list3 = [name+':'+ slogan[1:]]
输出结果如下:
['1.耐克:.Just do it']
['2.李宁:.一切皆有可能']
['3.鱼C工作室:.让编程改变世界']

为什么会造成这样的情况? 没弄懂。


以下是题目:
6.活学活用: 请使用列表推导式补充被小甲鱼不小心涂掉的部分
QQ截图20171130202441.jpg

  1. list1 = ['1.Just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothing']
  2. list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
  3. list3 = []

  4. for slogan in list1:
  5.     for name in list2:
  6.         
  7.         if slogan[0] == name[0]:
  8.             list3 = [name+':'+ slogan[2:]]
  9.             for each in list3:
  10.                     print(list3)
复制代码
最佳答案
2017-11-30 21:38:10
zhuoyue65 发表于 2017-11-30 21:33
1. slogan 相当于 list1[0]  或者  list1[1] 或者  list1[2] 或者  list1[3] 对吧?
那如果这样子 list1 ...

切片不是只有列表能用的,slogan此时是一个字符串,也可以进行切片,举个例子
a="good day"
a[2:]=="od day"
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-30 20:48:16 | 显示全部楼层
slogan表示的是每一项,而slogan[2:]就表示从每一项中第三个位置开始
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-30 20:59:31 From FishC Mobile | 显示全部楼层
看清楚,slogan不是list1本身,而是它的某一个元素
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-30 21:06:31 | 显示全部楼层
你的list3在循环的最里边,每次执行的只会在list3中存一个值,下一次的符合条件的元素会覆盖掉上一次的list3中的元素

  1. list1 = ['1.Just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothing']
  2. list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
  3. list3 = []
  4. list4 = []

  5. for slogan in list1:
  6.     for name in list2:
  7.         
  8.         if slogan[0] == name[0]:
  9.             list3 = [name+':'+ slogan[2:]]
  10.             list4.append(list3.pop())
  11. for each in list4:
  12.     print(each)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-30 21:20:27 | 显示全部楼层
  1. list1 = ['1.Just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothing']
  2. list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
  3. list3 = [sorted(list2,key=lambda i:i[0])[i]+':'+list1[i][2:] for i in range(len(list2))]
  4. for each in list3:
  5.     print(each)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-30 21:33:26 | 显示全部楼层
BngThea 发表于 2017-11-30 20:59
看清楚,slogan不是list1本身,而是它的某一个元素

1. slogan 相当于 list1[0]  或者  list1[1] 或者  list1[2] 或者  list1[3] 对吧?
那如果这样子 list1[0] = '1.Just do it'
那就相当于 slogan =[‘1.just do it’] ?
那我再IDLE里面输入 slogan[0] ,输入 '1.just do it' ; 我输入slogan[1]就报错。
还是不太理解, 我list3 = [slogan[2:]] 就会单独输出 just do it ,  序号 '1' 和 符号 '.' 都没了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-30 21:34:47 | 显示全部楼层

大兄弟,你这么写我更看不懂。。。
没有解释我的问题。
感觉是来秀操作的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-30 21:36:07 | 显示全部楼层
皮皮小发 发表于 2017-11-30 20:48
slogan表示的是每一项,而slogan[2:]就表示从每一项中第三个位置开始

我懂你的意思。
但是,
1. slogan 相当于 list1[0]  或者  list1[1] 或者  list1[2] 或者  list1[3] 对吧?
那如果这样子 list1[0] = '1.Just do it'
那就相当于 slogan =[‘1.just do it’] ?
那我再IDLE里面输入 slogan[0] ,输入 '1.just do it' ; 我输入slogan[1]就报错。
还是不太理解, 我list3 = [slogan[2:]] 就会单独输出 just do it ,  序号 '1' 和 符号 '.' 都没了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-30 21:38:10 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
zhuoyue65 发表于 2017-11-30 21:33
1. slogan 相当于 list1[0]  或者  list1[1] 或者  list1[2] 或者  list1[3] 对吧?
那如果这样子 list1 ...

切片不是只有列表能用的,slogan此时是一个字符串,也可以进行切片,举个例子
a="good day"
a[2:]=="od day"
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-30 22:18:13 | 显示全部楼层

看了半天才看懂,一行代码搞定就是舒服
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-30 22:32:11 | 显示全部楼层

  1. list1 = ['1.Just do it','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothing']
  2. list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
  3. list3 = []

  4. for slogan in list1:       #第一个循环第一次slogan内容为'1.Just do it'
  5.     for name in list2:     #第一个循环第一次第二个循环第四次name内容为‘1.耐克’   
  6.         
  7.         if slogan[0] == name[0]:   #满足条件
  8.             list3 = [name+':'+ slogan[2:]] #name=1.耐克 slogan[2:]=Just do it(slogan中第2位到最后一位)
  9.             for each in list3:             #list3=[1.耐克:Just do it]
  10.                     print(list3)           #打印的是list3而不是each所以打印[1.耐克:Just do it]
  11. #下次循环会得到的新值会在 list3 = [name+':'+ slogan[2:]]中将上一次的[1.耐克:Just do it]覆盖掉

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

使用道具 举报

发表于 2018-1-31 12:18:04 | 显示全部楼层
在'1.Just do it'  里,
0号位置 是 1
1号位置 是 .
2号位置是 Just do it

2号位置不是Just do it而是J,甚至单词中间的空格也是一个位置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-4 10:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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