Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python,字符串比较不起作用?_Python_String_Python 3.x_Compare - Fatal编程技术网

python,字符串比较不起作用?

python,字符串比较不起作用?,python,string,python-3.x,compare,Python,String,Python 3.x,Compare,我的任务是在一个单词列表上创建一个二进制搜索,我已经提出了两个实现(显然还没有提出一个单词还没有找到的情况,但这还不是一个问题),但是当列表缩小到我正在寻找的单词时,我的函数并没有完成,相反,它会一直运行,直到超过最大递归深度 我把它打印出来,它清楚地显示在dasList[mid]上,并且一遍又一遍地显示这个词,直到它最终放弃 def _bisect2(dasList, word): mid = int(len(dasList)/2) if word.lower() > d

我的任务是在一个单词列表上创建一个二进制搜索,我已经提出了两个实现(显然还没有提出一个单词还没有找到的情况,但这还不是一个问题),但是当列表缩小到我正在寻找的单词时,我的函数并没有完成,相反,它会一直运行,直到超过最大递归深度

我把它打印出来,它清楚地显示在
dasList[mid]
上,并且一遍又一遍地显示这个词,直到它最终放弃

def _bisect2(dasList, word):
    mid = int(len(dasList)/2)
    if word.lower() > dasList[mid].lower():
        return _bisect2(dasList[mid: len(dasList)], word)            
    if word.lower() < dasList[mid].lower():
        return _bisect2(dasList[0: mid], word)
    else:
        return mid
我正在使用Python 3.0解释器。有什么建议吗?

您的实现(几乎)适合我(并且没有显示您在我的预排序输入中描述的行为)。我想你已经把你的输入文件分类了?下面是一个稍加修改的(工作)示例

def _bisect2(dasList, word,lidx=0):
    mid = int(len(dasList)/2)
    if word.lower() > dasList[mid].lower():
        return _bisect2(dasList[mid:], word,lidx=lidx+mid)            
    elif word.lower() < dasList[mid].lower():
        return _bisect2(dasList[:mid], word,lidx=lidx)
    return lidx+mid

words=sorted(["one","two","three","four","five","twenty","foo"])
print (words)
print (_bisect2(words,'three'))
def_二等分2(数据列表,字,lidx=0):
mid=int(len(dasList)/2)
如果word.lower()>dasList[mid].lower():
返回二等分(dasList[mid:],word,lidx=lidx+mid)
elif word.lower()
请注意,您正在返回最后一个部分列表中的索引(始终为0).

您的实现(几乎)适合我(并且没有显示您使用预排序输入描述的行为)。我想你已经把你的输入文件分类了?下面是一个稍加修改的(工作)示例

def _bisect2(dasList, word,lidx=0):
    mid = int(len(dasList)/2)
    if word.lower() > dasList[mid].lower():
        return _bisect2(dasList[mid:], word,lidx=lidx+mid)            
    elif word.lower() < dasList[mid].lower():
        return _bisect2(dasList[:mid], word,lidx=lidx)
    return lidx+mid

words=sorted(["one","two","three","four","five","twenty","foo"])
print (words)
print (_bisect2(words,'three'))
def_二等分2(数据列表,字,lidx=0):
mid=int(len(dasList)/2)
如果word.lower()>dasList[mid].lower():
返回二等分(dasList[mid:],word,lidx=lidx+mid)
elif word.lower()

请注意,您正在返回上一部分列表中的索引(始终为0).

这对我来说很好。请注意,在末尾返回的索引将始终是最小列表中单词的索引,而不是原始列表的索引

还可以看到,
比较不会再次对列表执行len,它只是迭代到最后。切片语法允许您在迭代结束时省略最后一个数字

words = "The quick brown fox jumped over the lazy dog".split()

def bisect(words, word):
    mid = int(len(words)/2)
    if word.lower() > words[mid].lower():
        return bisect(words[mid:], word)
    elif word.lower() < words[mid].lower():
        return bisect(words[0:mid], word)
    return mid

words = sorted(words)
print bisect(words, 'dog')
words=“敏捷的棕色狐狸跳过了懒狗”。split()
定义对分(单词,单词):
mid=整数(长(字)/2)
如果word.lower()>words[mid].lower():
返回对分(单词[mid:],单词)
elif word.lower()
这对我来说很好。请注意,在末尾返回的索引将始终是最小列表中单词的索引,而不是原始列表的索引

还可以看到,
比较不会再次对列表执行len,它只是迭代到最后。切片语法允许您在迭代结束时省略最后一个数字

words = "The quick brown fox jumped over the lazy dog".split()

def bisect(words, word):
    mid = int(len(words)/2)
    if word.lower() > words[mid].lower():
        return bisect(words[mid:], word)
    elif word.lower() < words[mid].lower():
        return bisect(words[0:mid], word)
    return mid

words = sorted(words)
print bisect(words, 'dog')
words=“敏捷的棕色狐狸跳过了懒狗”。split()
定义对分(单词,单词):
mid=整数(长(字)/2)
如果word.lower()>words[mid].lower():
返回对分(单词[mid:],单词)
elif word.lower()
为什么不使用Python的模块

从文档中:

def index(a, x):
    'Locate the leftmost value exactly equal to x'
    i = bisect_left(a, x)
    if i != len(a) and a[i] == x:
        return i
    raise ValueError
例如:

>>> a = ['alfred','edward','mary','susan','thomas','wilma']
>>> index(a, 'mary')
2
>>> index(a, 'martha')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in index
ValueError
>a=['alfred','edward','mary','susan','thomas','wilma']
>>>索引(a,‘玛丽’)
2.
>>>索引(a,‘玛莎’)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第6行,在索引中
数值误差
为什么不使用Python的模块

从文档中:

def index(a, x):
    'Locate the leftmost value exactly equal to x'
    i = bisect_left(a, x)
    if i != len(a) and a[i] == x:
        return i
    raise ValueError
例如:

>>> a = ['alfred','edward','mary','susan','thomas','wilma']
>>> index(a, 'mary')
2
>>> index(a, 'martha')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in index
ValueError
>a=['alfred','edward','mary','susan','thomas','wilma']
>>>索引(a,‘玛丽’)
2.
>>>索引(a,‘玛莎’)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第6行,在索引中
数值误差

这两种实现都会发生此错误。奇怪的是,您是否忘记对
文件列表进行预排序
?标准库已经包含了一个
对分
模块。这是家庭作业吗?两种实现都会出现此错误。奇怪的是,您是否忘记对
文件列表进行预排序
?标准库已经包含了
对分
模块。这是作业吗?是的,单词列表已经排序,是的,你是对的,它将返回0。然而,我注意到的是,我输入的单词似乎在末尾加了一个空格。为什么会这样?好吧,就这样;)那么你的话就不在名单上了。只需去除你的输入,你就可以了。很酷,谢谢。^它为什么要附加它?是不是按下enter键后添加的换行符?@Tony——我不确定。尝试使用
raw\u input
而不是
input
——因为您需要字符串,所以这可能更安全。据所有人所知,“raw\u input()”已更改为input,并且在调查了“.strip()”之后,我遇到了“.rstrip()”,它也完成了任务。谢谢你的帮助!是的,单词列表已排序,是的,您是对的,它将返回0。然而,我注意到的是,我输入的单词似乎在末尾加了一个空格。为什么会这样?好吧,就这样;)那么你的话就不在名单上了。只需去除你的输入,你就可以了。很酷,谢谢。^它为什么要附加它?是不是按下enter键后添加的换行符?@Tony——我不确定。尝试使用
raw\u input
而不是
input
——因为您需要字符串,所以这可能更安全。据所有人所知,“raw\u input()”已更改为input,并且在调查了“.strip()”之后,我遇到了“.rstrip()”,它也完成了任务。谢谢你的帮助!因为了解im更有趣