0

我正在为我的代码寻求一些帮助,这是一个简单的 python 代码,但我是新手,所以对我来说有点棘手..

我想要做的只是获取一个 .txt 文件,读取它并将其与一些字符串进行比较,然后说出 .txt 文件的哪些单词没有我要询问的字符串,例如:

txt 文件:ABCD AABC DDCA CDAA CDAB EEGF GFFE

还有我的字符串限制: S= ['AA', 'BB', 'CC', DD']

所以输出应该是这样的: ABCD CDAB EEGF GFFE

其他的无法显示,因为它们与 S 中的一个或多个字符串匹配。现在,我的代码和我的问题。

我有以下代码:

import string

ins = open( "prueba.txt", "r" )
array = []

for line in ins:
    array.append( line )
ins.close()

s = ''.join(array)
a= s.split()
c = ['AA', 'BB','CC', 'DD','EE', 'FF','GG', 'HH','II', 'JJ','KK', 'LL', 'MM', 'NN','OO', 'PP','QQ', 'RR','SS', 'TT','UU', 'VV', 'WW', 'XX','YY', 'ZZ']

i=0
j=0
f= c[j]

for j in range(0,len(a)):
     if a[i].find(f) != -1:
        print 'Is in:' , a[i]
        i=i+1
     else:
        print 'Is not in:' , a[i]
        i=i+1

以及以下 txt 文件:AAC ABC ACC ADD FAA

我的输出是:在:AAC 不在:ABC 不在:ACC 不在:ADD 在:FAA

从这里我可以看到,我的代码没有迭代它应该如何,所以它没有打印正确的答案。

我一直在尝试很多方法来解决它,但我无法找到解决方案,所以如果有人可以帮助我解决这个问题,我将非常感激!

非常感谢!

4

4 回答 4

3

find您可以通过避免显式循环索引并使用以下替换调用来编写相当紧凑的代码 in

$ cat t.py
ins = open( "prueba.txt", "r" ).read()
res = ['AA', 'BB','CC', 'DD']

for i in ins.split():
    if all([r not in i for r in res]):
        print i


$ cat prueba.txt 
ABCD AABC DDCA CDAA CDAB EEGF GFFE
$ python t.py
ABCD
CDAB
EEGF
GFFE
$ 
于 2013-11-10T19:29:45.413 回答
0

尝试这个:

s = ['AA', 'BB', 'CC', 'DD']
mInput = ['ABCD','AABC','DDCA','CDAA','CDAB','EEGF','GFFE']

anti_res = []

for e in mInput:
    for i in s:
        print i
        if i in e:
            if e not in anti_res:
                anti_res.append(e)

res = [e for e in mInput if e not in anti_res]
print res
于 2013-11-10T19:15:56.417 回答
0

您的代码有几个问题。在检查所有 AA、BB、CC、EE 值之前更新 i。这就是为什么你不会得到所有的限制。

我编写了以下代码,我认为这可能是您需要的。试试看,如果您需要我进一步解释,请告诉我。

import string

ins = open( "prueba.txt", "r" )
array = []

for line in ins:
    array.append( line )
ins.close()

s = ''.join(array)
a= s.split()
c = ['AA', 'BB','CC', 'DD','EE', 'FF','GG', 'HH','II', 'JJ','KK', 'LL', 'MM', 'NN','OO', 'PP','QQ', 'RR','SS', 'TT','UU', 'VV', 'WW', 'XX','YY', 'ZZ']

i=0
j=0


for i in range(0,len(a)): #go through all the items from the input list
  found=False
  for j in range(0,len(c)): #check every item against every restriction
       f=c[j]
       if a[i].find(f) != -1:
          print 'Is in:' , a[i]
          found=True #remember if we found a restriction and stop the loop
          break
  if(found==False): print 'Is not in:' , a[i] #if by the end of the loop no restriction was found tell me that nothing was found
于 2013-11-10T19:25:26.513 回答
0

问题是您假设 f 在您更改 j 时会自动更新。

尝试改变

 if a[i].find(f) != -1:

 if a[i].find(c[j]) != -1:

此外,您可能应该有一个循环来更改 i.

于 2013-11-10T19:13:03.267 回答