【发布时间】:2019-06-26 20:41:48
【问题描述】:
我在名为 data 的列表中几乎没有文件名。我想读取文件的内容并检查给定的文本(例如 - 橙色)是否出现在文件中。我的文件名按顺序附加到列表中,即如果给定文本“橙色”,出现在文件 pi.txt(索引 2)中,它也将出现在索引 2 之后的所有文件中,当然我想得到首先出现文本“橙色”的索引或文件名。
我的列表中有超过一千个文件,因此我想使用二进制搜索。
data = ['ae.txt', 'ac.txt', 'pi.txt', 'ad.txt', 'mm.txt', 'ab.txt']
target = "orange"
def binary_search(a, x):
lo = 0
hi = len(a)
while lo < hi:
mid = (lo + hi) // 2
if not x in open(a[mid]).read():
lo = mid + 1
elif x in open(a[mid]).read():
hi = mid
elif mid > 0 and x in open(a[mid-1]).read():
hi = mid
else:
return mid
return -1
print(binary_search(data, target))
$ cat ae.txt
papaya
guava
$ cat ac.txt
mango
durian
papaya
guava
$ cat pi.txt
orange
papaya
guava
$ cat ad.txt
orange
papaya
guava
$ cat mm.txt
orange
papaya
guava
$ cat ab.txt
orange
papaya
guava
【问题讨论】:
-
你的问题是什么?
-
如果你运行我上面粘贴的代码,它不会给出预期的结果。在我的情况下,结果应该是 2,因为“橙色”首先出现在“pi.txt”中。谢谢。
标签: python binary-search