第十一课的动手习题
有两个问题请教。。。第一个问题,程序理解:
list1 = ['1.Jost do It','2.一切皆有可能','3.让变成改变世界','4.Impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
list3 = [name + ':' + temp for temp in list1 for name in list2 if temp == name]
print(list3)
for each in list3:
print(each)
蓝字部分不是很理解,为什么name不需要加[]而temp需要加[]
后面if temp == name,为什么会自动调整顺序,有点懵了
第二个问题:
我自己写了个推导式总是在蓝字部分报错,找不到原因了,
list1 = ['1.Jost do It','2.一切皆有可能','3.让变成改变世界','4.Impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
list3 = []
for temp in list1:
for name in list2:
if temp == name:
list3.append(name + ':' + temp)
print(list3)
for each in list3:
print(each,end='')
请大佬赐教,就这个题目弄了一个多小时没明白
懵不懵主要看你用不用心。好好看看改变后的代码吧
list1 = ['1.Jost do It','2.一切皆有可能','3.让变成改变世界','4.Impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
list3 = []
for temp in list1:
for name in list2:
if temp == name:
list3.append(name + ':' + temp)
print(list3)
for each in list3:
print(each)
1、因为外层循环对象是 list1 ,list1 中字符串的首字符是按 '1'、'2'、'3'、'4' 的顺序排列的,而 list3 中新元素的数字序号继承自 list1,所以,其数字序号自然与 list1 保持一致;
2、 你的代码显然存在缩进问题:
if temp == name:
list3.append(name + ':' + temp)
print(list3) # 此句与上一句不应该有缩进关系
这么改就不会有问题了:
if temp == name:
list3.append(name + ':' + temp)
print(list3) 1.(1)不用打[]的原因在于你想要输出什么样的结果,你加中括号也是没错的,按上面的代码你会输出比如说(1.耐克:just do it)因为你不想输出的结果是:(1.耐克:1.just do it)所以将后面的字符串切片了,前面的1.就去掉,因此就是name不要加,temp要加
(2)temp和name都是字符串,代码的判断条件就是判断字符串前面那个数字是不是一样的,如果是一样的就会被放入到列表3中,不是一样的就会被过滤,所以输出的结果你看起来就是在排序。此外,如果你说的排序是指1.2,3,4这种升序排列的话,主要原因在于在列表3中你是先循环了列表1,所以排序就会是1—-、2——-、3—-、4—-。如果你先循环列表2.输出的结果就会是4—-、3—-等(降序排列)
2.你的代码中print()的缩进有问题(参考楼上大佬们回答) 补充一下,那个升序与降序是你人为控制的。因为你自己在创建列表1与列表2的时候,对于每一个元素你自己就排了一个序,所以结果就会出现排序这么一说,如果你给定的元素前面没有序号或者随意给数字,那输出的结果就看起来就是乱序了(当然你最终的判断条件就需要跟着变) 本帖最后由 Peteryo01223 于 2020-1-2 16:56 编辑
第一个问题:为什么name不需要加[]而temp需要加[] (因为:name的全部字符都需要,而temp中我们仅仅需要序号和 . 之后的所有字符,所以用合理,表示“只需要从第三个字符开始显示”)
后面if temp == name,为什么会自动调整顺序,有点懵了(因为:for temp in list1 for name in list2 这里看temp和name谁在前。temp在前,就按照temp目前的顺序1.2.3.4开始比对。如果,你换成for name in list2 for temp in list1,就按照name的顺序比对,你会发现排列就是4.2.3.1了,对不?)
第二个问题:代码存在缩进问题,请参考以上各位的解释。 jackz007 发表于 2020-1-1 23:30
1、因为外层循环对象是 list1 ,list1 中字符串的首字符是按 '1'、'2'、'3'、'4' 的顺序排列的,而 l ...
多谢解惑,我犯了个低级错误 ba21 发表于 2020-1-1 23:19
懵不懵主要看你用不用心。好好看看改变后的代码吧
多谢解惑,我知道自己犯了两个错误,第一个是缩进不正确,print不应该在list3.append下一行缩进;第二个是print(list3)应与首个for循环一致,否则每循环一次就会输出一次 百分号 发表于 2020-1-2 00:34
1.(1)不用打[]的原因在于你想要输出什么样的结果,你加中括号也是没错的,按上面的代码你会输出比如说(1 ...
多谢解惑,首先附正确答案:
list1 = ['1.Jost do It','2.一切皆有可能','3.让变成改变世界','4.Impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
list3 = []
for temp in list1:
for name in list2:
if temp == name:
list3.append(name + ':' + temp)
# print(list3)
print(list3)
for each in list3:
print(each)
关于if temp == name:这行代码我明白什么意思了,因为temp是属于list1列表,name属于list2列表,所以name【0】实际是list1中每一个列表的第一个元素,例如name = ('1.耐克'),那么name实际就是1,同样如你所说,temp就是我讲temp进行了切片,因为我不想再输入一个<1.>,所以我将字符串temp = ('1.Jost do It')从第二个元素开始进行了切片,只取<Jost do It> Peteryo01223 发表于 2020-1-2 16:42
第一个问题:为什么name不需要加[]而temp需要加[] (因为:name的全部字符都需要,而temp中我们仅仅需要序 ...
多谢解惑,我明白了
页:
[1]