if -string- in set不起作用

时间:2016-02-17 06:40:34

标签: python python-2.7 search

我试图检查输入是否在一组中。我从words.dat文件中获取了该集。集合是正确的,但else语句总是被执行。这是我的代码:

import fileinput
def words2array(words):
    woorden = set([])
    for line in fileinput.input(words):
        woorden.add(line)
    return woorden
def krijgInput():
    input = raw_input().upper()
    input += "/n"
    return input
woordSet = words2array("words.dat")
input = krijgInput()
if 'input' in woordSet:
    print "Ja"
else:
    print "Nee"
print input
print woordSet

这是该集的一部分,我无法发布全套,因为它有大约80k-120k的单词。 'SPOUT\n', 'BLASTOMA\n', 'HINDGUT\n', 'FORGOER\n', 'LEOPARDS\n', 'SPECULUM\n', 'KEROSENES\n', 'CARIED\n', 'SOUBISES\n', 'ANIMALS\n', 'DISSERTS\n', 'OMISSIVE\n', 'VIREMIC\n', 'FLUSTERING\n', 'PLENUMS\n', 'VACUITY\n',

这有点来自words.dat

AARDVARK
AARDVARKS
AARDWOLF
AARDWOLVES
AAS
AASVOGEL
AASVOGELS
ABA
ABACA
ABACAS
ABACI
ABACK
ABACUS
ABACUSES
ABAFT

3 个答案:

答案 0 :(得分:3)

您正在检查文字字符串'input',而不是您已成功使用多次的变量input

此外,请勿使用input作为变量名称,因为它会掩盖内置内容。

/n'BLASTOMA\n'进行比较 - /\不同。使用\n

这是一种更简单的方法:

with open('words.dat') as f:
    if raw_input().upper()+'\n' in set(f):
        print 'Ja'
    else:
        print 'Nee'

请注意,这取决于"空"文件末尾的行。如果最后一行只是没有换行符的最后一个单词,请改用if raw_input().upper() in set(map(str.strip, f))

答案 1 :(得分:1)

您需要从您从文件中检索的行中删除" \n" s:

for line in fileinput.input(words):
    woorden.add(line.strip('\n')) # strip

&安培;变化

if 'input' in woordSet: # check if string in set, wrong

if input in woordSet: # check if input in set

&安培;正如下面评论中提到的 @grc ,为了使其正常工作,您需要删除此行

input += "/n"

以获得您想要的整齐元素。

答案 2 :(得分:0)

您正在尝试搜索"输入"作为单词集中的字符串。

请将以下行更改为:

input = krijgInput()
if input in woordSet:

在这里,您将从set中搜索用户输入。