鱼C论坛

 找回密码
 立即注册
查看: 3696|回复: 21

[已解决]相同字符串比较之后为什么不同

[复制链接]
发表于 2017-3-8 09:18:38 | 显示全部楼层 |阅读模式

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

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

x
列表list1[0]=D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg
列表list2[0]=D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg 78 129 85 128
我想比较list1[0]和list2[0]是否完全相同,list2[0]后面四个数字不用考虑,我用list1[0] in list2[0]结果返回F,我用先统计list1[0]的长度,
即len(list1[0]),然后我从list2[0]中从头截取到len(list1[0])获得新的字符串,即b= List2[0][0: len(List1[0])],我设定a=List1[0],
print a
print b
能够看到 a b完全相同,而且长度都一样,类型都为str,但是用cmp(a,b),则返回-1,说明a<b,这怎么解决啊?新手求助,
是因为字符串里面有反斜杠的原因么?
最佳答案
2017-3-8 10:41:59
txt文件每行末尾应该有个换行符,你把列表以字符的形式输出来看看有没有。b取得只是一行的一部分,没有这个换行符,而a可能有,你试试看能不能找出问题。
调试的时候每次解决一个小局部的问题,不要一次全部输出结果来,有可能出问题的地方先print出来看与预期是否一致,不一致就改改。

程序

程序

结果

结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-8 09:24:51 | 显示全部楼层
用的是python2.7
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 09:32:00 | 显示全部楼层
我又试了join方法
c ="".join(a)
d ="".join(b)
print c
print d
if c == d:
        print "T"
else:
        print "F"
结果输出
D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg

D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg
F
还是不对啊,明明一样的字符串为啥比较之后得到的结果是不一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-8 09:41:11 | 显示全部楼层
好像没发生你说的情况!
QQ截图20170308094133.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 09:55:31 | 显示全部楼层
我是先读取txt里的内容转换成列表之后再比较的,不是直接给列表元素赋值字符串
C:\Users\Rain\Desktop\QQ截图20170308093003.png
C:\Users\Rain\Desktop\QQ截图20170308095110.png
C:\Users\Rain\Desktop\QQ截图20170308095201.png
C:\Users\Rain\Desktop\QQ截图20170308095217.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 09:56:27 | 显示全部楼层
txt1
QQ截图20170308093003.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-8 09:57:02 | 显示全部楼层
#-*- coding: utf-8 -*-
from numpy import *
import urllib
#读取1.txt中内容转换为列表
txt1=r"1.txt"
fp1=open(txt1)
List1=[]
for data1 in fp1.readlines():
        List1.append(data1)
print List1
fp1.close()
#读取2.txt中内容转换为列表
txt2=r"2.txt"
fp2=open(txt2)
List2=[]
for data2 in fp2.readlines():
        List2.append(data2)
print List2
a = List1[0]
b = List2[0][0: len(List1[0])-1]
print List1[0]
print List2[0]
print a
print b
if List1[0] in List2[0]:
        print "T"
else:
        print "F"
if a == b:
        print "T"
else:
        print "F"

fp2.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 09:57:36 | 显示全部楼层
结果输出
['D:\\dlib_face\\lfw-deepfunneled\\Abdoulaye_Wade\\Abdoulaye_Wade_0003.jpg\n', 'D:\\dlib_face\\lfw-deepfunneled\\Amelie_Mauresmo\\Amelie_Mauresmo_0021.jpg\n', 'D:\\dlib_face\\lfw-deepfunneled\\Angela_Merkel\\Angela_Merkel_0003.jpg\n', 'D:\\dlib_face\\lfw-deepfunneled\\Ariel_Sharon\\Ariel_Sharon_0018.jpg\n', 'D:\\dlib_face\\lfw-deepfunneled\\Arnold_Schwarzenegger\\Arnold_Schwarzenegger_0029.jpg']
['D:\\dlib_face\\lfw-deepfunneled\\Abdoulaye_Wade\\Abdoulaye_Wade_0003.jpg 78 129 85 128\n', 'D:\\dlib_face\\lfw-deepfunneled\\Amelie_Mauresmo\\Amelie_Mauresmo_0021.jpg 92 151 107 142\n', 'D:\\dlib_face\\lfw-deepfunneled\\Angela_Merkel\\Angela_Merkel_0003.jpg 94 153 109 135\n', 'D:\\dlib_face\\lfw-deepfunneled\\Ariel_Sharon\\Ariel_Sharon_0018.jpg 95 150 105 135']
D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg

D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg 78 129 85 128

D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg

D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg
F
F
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 09:58:56 | 显示全部楼层
1.txt内容
D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg
D:\dlib_face\lfw-deepfunneled\Amelie_Mauresmo\Amelie_Mauresmo_0021.jpg
D:\dlib_face\lfw-deepfunneled\Angela_Merkel\Angela_Merkel_0003.jpg
D:\dlib_face\lfw-deepfunneled\Ariel_Sharon\Ariel_Sharon_0018.jpg
D:\dlib_face\lfw-deepfunneled\Arnold_Schwarzenegger\Arnold_Schwarzenegger_0029.jpg
2.txt内容
D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg 78 129 85 128
D:\dlib_face\lfw-deepfunneled\Amelie_Mauresmo\Amelie_Mauresmo_0021.jpg 92 151 107 142
D:\dlib_face\lfw-deepfunneled\Angela_Merkel\Angela_Merkel_0003.jpg 94 153 109 135
D:\dlib_face\lfw-deepfunneled\Ariel_Sharon\Ariel_Sharon_0018.jpg 95 150 105 135
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 10:01:30 | 显示全部楼层
这是神马情况求助啊,从昨晚熬夜到现在也没解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-8 10:07:58 | 显示全部楼层
1.   对两个列表的元素进行比较.
2.   如果比较的元素是同类型的,则比较其值,返回结果.
3.   如果两个元素不是同一种类型,则检查它们是否是数字.
     a. 如果是数字,执行必要的数字强制类型转换,然后比较.
     b. 如果有一方的元素是数字,则另一方的元素"大"(数字是"最小的")
     c. 否则,通过类型名字的字母顺序进行比较.
4.   如果有一个列表首先到达末尾,则另一个长一点的列表"大".
5.   如果我们用尽了两个列表的元素而且所有元素都是相等的,那么结果就是个平局,就
是说返回一个 0.

参考下,从你上边打印的长度来说应该是一样的,你看下是否a和b属于不同类型的
还有加上去除空格操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 10:13:01 | 显示全部楼层
lumber2388779 发表于 2017-3-8 10:07
1.   对两个列表的元素进行比较.
2.   如果比较的元素是同类型的,则比较其值,返回结果.
3.   如果两个元 ...

print type(a)
print type(b)
输出
<type 'str'>
<type 'str'>
这里面没有空格,好桑心
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 10:19:35 | 显示全部楼层
把List2[0]空格去掉再比较
c = List2[0].replace(' ','')
print c
if List1[0] in c:
        print "T"
else:
        print "F"
结果还是F
D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg7812985128

F
呜呜呜呜呜呜呜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 10:23:29 | 显示全部楼层
在线等亲们帮忙解决啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-8 10:29:21 | 显示全部楼层
lightrain00700 发表于 2017-3-8 09:57
#-*- coding: utf-8 -*-
from numpy import *
import urllib

读的不是同一个TXT的内容吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 10:31:40 | 显示全部楼层
为什么我用a里面的内容写就可以
if 'D:\dlib_face\lfw-deepfunneled\Abdoulaye_Wade\Abdoulaye_Wade_0003.jpg' in c:
        print "T"
else:
        print "F"
输出T
换成a
if a in c:
        print "T"
else:
        print "F"
输出F
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-8 10:36:45 | 显示全部楼层
雾霾下的星空 发表于 2017-3-8 10:29
读的不是同一个TXT的内容吧?

是的,读取的是两个txt的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-8 10:41:59 | 显示全部楼层    本楼为最佳答案   
txt文件每行末尾应该有个换行符,你把列表以字符的形式输出来看看有没有。b取得只是一行的一部分,没有这个换行符,而a可能有,你试试看能不能找出问题。
调试的时候每次解决一个小局部的问题,不要一次全部输出结果来,有可能出问题的地方先print出来看与预期是否一致,不一致就改改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-8 10:46:15 | 显示全部楼层
按你的操作重复了一遍,没有任何问题,我用的是python2.7.10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-8 10:47:04 | 显示全部楼层
lightrain00700 发表于 2017-3-8 10:36
是的,读取的是两个txt的内容

而且两个文本的内容不同,可以仔细检查一下两个文本内容是否确实相同,也可以list读同意TXT内容进行测试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 10:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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