请教一个列表里字符串比较的问题
这个是第12课课后题最后一问,6. 活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分
https://xxx.ilovefishc.com/forum/201310/12/044035qddrqkmrqod4cqmr.png
答案是:
>>> list3 = for slogan in list1 for name in list2 if slogan == name]
答案里if条件对列表里的字符串进行了比较,有几个疑惑
1.课上说字符串的比较不是比较ascell值么(好像是这么拼,这不重要),按答案的方法来讲是比较字符串首个字符的大小。
2.我自己单独试了一下答案里的比较方式, 定义了list1和list2后,输入 list1==list2 但是一直返回false,这是为啥啊,按答案的方法应该返回true啊。
求解求解,谢谢各位大佬 第一,是比较首字符的码值,这里可以理解为是否一致 第二,它俩是俩字符串的比较,要求完全一致,才是true 本帖最后由 Twilight6 于 2020-6-18 12:52 编辑
课上说字符串的比较不是比较ascell值么(好像是这么拼,这不重要),按答案的方法来讲是比较字符串首个字符的大小。
说比较 ASCII 值也没错呀没错 ,你比首个字母是否相等本质 不是照样是 比较 ASCII 码值? 而 == 这个符号简单理解直接判断字符是否相同就好了,本质也是按顺序比较ASCII值
2.我自己单独试了一下答案里的比较方式, 定义了list1和list2后,输入 list1==list2 但是一直返回false,这是为啥啊,按答案的方法应该返回true啊。
你看看下面的理解吧,再试试你自己的:
几个简单列表推导式的例子吧有助于你以后理解(假设已经给出了列表 ls1,ls2):
temp =
最简单的列表推导式:将 遍历 ls1中的元素 依次赋值给 x 加入列表中去
可以分解成:
temp = []
for x in ls1:
temp.append(x)
temp =
将遍历ls1中的元素,将符合条件的元素加的列表中
可以分解成这样:temp = []
for x in ls1:
if <条件>:
temp.append(x)
temp =
将 x 遍历 ls1 中的元素,然后 i 遍历 ls2 的元素 将符合条件后的 x+i 的结果依次加入列表中
可以分解成这样:temp = []
for x in ls1:
for i in ls2:
if <条件>:
temp.append(x+i)
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是遍历list1中的元素,name1是遍历list2的元素,slogan和name是列表中每个元素的第一个字符,所以你要象下面演示的那样才能得到正确答案:
>>> list1=['1.Just do It','2.一切皆有可能','3.让编程改变世界','4.Impossible is Nothin']
>>> list2=['4.阿迪达斯','2.李宁','3.鱼C工作室','1.耐克']
>>> list1
'1.Just do It'
>>> list2
'1.耐克'
>>> list1 == list2
True Twilight6 发表于 2020-6-18 12:29
说比较 ASCII 值也没错呀没错 ,你比首个字母是否相等本质 不是照样是 比较 ASCII 码值? 而 == 这个 ...
列表推导我会,自己也分解写出来了,得出的结果也对。
按代码的意思是当slogan == name 时执行append的操作。
也就是1.nike == 1.just do it
那么当我在idle里单独尝试 list1==list2 的时候却返回false,这是为什么啊 shmily1866 发表于 2020-6-18 14:55
列表推导我会,自己也分解写出来了,得出的结果也对。
按代码的意思是当slogan == name 时执行a ...
字符不相等 就返回 False 了
你可以发下你的代码 帮你看看 这样更好解释 wp231957 发表于 2020-6-18 12:05
第二,它俩是俩字符串的比较,要求完全一致,才是true
但是答案里对字符串进行了比较,直接执行答案的代码结果也是正确的啊。我自己比较却返回flase Twilight6 发表于 2020-6-18 14:56
字符不相等 就返回 False 了
你可以发下你的代码 帮你看看 这样更好解释
list1 =['1.just','2.yiqie','3.biancheng','4.nothing']
list2 =['4.adi','2.lining','3.鱼c','1.nike']
list3 = []
for slogan in list1:
for name in list2:
if slogan == name:
list3.append(name+':'+slogan)
print (list3)
执行后结果没毛病
['1.nike:just', '2.lining:yiqie', '3.鱼c:biancheng', '4.adi:nothing']
然后我试着在idle里尝试一些字符串的比较
>>> list1 =['1.just','2.yiqie','3.biancheng','4.nothing'];list2 =['4.adi','2.lining','3.鱼c','1.nike']
>>> list1>list2
False
>>> list1<list2
True
>>> list1 == list2
False
list1(也就是'1.just')是小于list(也就是'1.nike') 的,他俩不等于
就很奇怪。为啥if slogan == name可以得到true的结果,我自己在idle里却不行呢。
我也尝试了列表里只有一个元素的情况,
>>> n=['1.just'];n1=['1.nike']
>>> n==n1
False
>>> n<n1
True
就他娘的邪了门了。。。。我用的是3.8.2版本 shmily1866 发表于 2020-6-18 15:28
list1 =['1.just','2.yiqie','3.biancheng','4.nothing']
list2 =['4.adi','2.lining','3.鱼c','1.nike' ...
list1 =['1.just','2.yiqie','3.biancheng','4.nothing']
list2 =['4.adi','2.lining','3.鱼c','1.nike']
则你 :
list1 = '1.just'
list2 = '1.nike'
相当于比较 '1.just' > '1.nike'
字符串逐个比较是比较ASCII码值的,只要有一个比较出大小就不在后续进行比较
这里先比较
'1' 和 '1'发现相等 继续比较下一个字符
'.' 和 '.' 发现还是相等 继续比较下一个字符
'j' 和 'n' 比较大小, 而 j 的ASCII码值是 106 n 的ASCII码值是 110 所以j < n
所以 list1 < list2 而你判断是list1>list2 当然返回 False shmily1866 发表于 2020-6-18 15:09
但是答案里对字符串进行了比较,直接执行答案的代码结果也是正确的啊。我自己比较却返回flase
>>> list3 = for slogan in list1 for name in list2 if slogan == name]
以上答案里的slogan,name 是取的list1、2里的元素,slogan == name是将两个元素内第1个字符做比较。
而你说的list1 == list2是将两个列表的两个元素做比较,返回的当然是False txxcat 发表于 2020-6-18 14:48
看样子你对答案的列表推导式并没有理解,slogan是遍历list1中的元素,name1是遍历list2的元素,slogan和 ...
那为啥答案里的if slogan == name可以得到true的结果啊。
我还尝试了列表里只有一个元素的情况
>>> n=['1.just'];n1=['1.nike']
>>> n==n1
False
结果还是不相等 Twilight6 发表于 2020-6-18 15:37
则你 :
list1 = '1.just'
list2 = '1.nike'
那为啥答案里的if slogan == name可以得到true的结果啊。
我还尝试了列表里只有一个元素的情况
>>> n=['1.just'];n1=['1.nike']
>>> n==n1
False
结果还是不相等 yhhpf 发表于 2020-6-18 15:39
>>> list3 = for slogan in list1 for name in list2 if slogan == name ...
那为啥答案里的if slogan == name可以得到true的结果啊。
我还尝试了列表里只有一个元素的情况
>>> n=['1.just'];n1=['1.nike']
>>> n==n1
False
结果还是不相等 shmily1866 发表于 2020-6-18 15:46
那为啥答案里的if slogan == name可以得到true的结果啊。
我还尝试了列表里只有一个元素的 ...
醉了呀 你
n=['1.just']
n1=['1.nike']
nn1 是指 列表里面的 第一个元素 ,是整个字符串 '1.just' 、'1.nike'
而甲鱼哥的 是'1.just' 、'1.nike' 字符串的第一个元素 '1' 、 '1' Twilight6 发表于 2020-6-18 15:48
醉了呀 你
n=['1.just']
n1=['1.nike']
for命令遍历的是列表里每个元素的每个字符??? shmily1866 发表于 2020-6-18 15:59
for命令遍历的是列表里每个元素的每个字符???
for 循环遍历列表里的字符串元素
temp = ['111','222','333']
for i in temp:
print(i)
>>>111
>>>222
>>>333
for i in temp:
print(i)
>>>1
>>>2
>>>3 shmily1866 发表于 2020-6-18 15:59
for命令遍历的是列表里每个元素的每个字符???
那为啥答案里的if slogan == name可以得到true的结果啊。
for 命令是遍历 里每个元素的每个字符么?
n1==n确实相等
但是答案里他就写了一个啊,而且执行起来也没问题 Twilight6 发表于 2020-6-18 16:02
for 循环遍历列表里的字符串元素
明白了,万分感谢!!!!!!! Twilight6 发表于 2020-6-18 16:02
for 循环遍历列表里的字符串元素
for i in temp:
print(i)
>>>111
>>>222
>>>333
也就是 i 此时就是个普通变量不是一个列表对吧
页:
[1]
2