Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Binary - Fatal编程技术网

Python通过空间分割文件中的字符串

Python通过空间分割文件中的字符串,python,list,binary,Python,List,Binary,我正在尝试二进制搜索。我希望它将值拆分为: 751 755 762 763 774 777 785 797 798 809 814 817 822 824 827 841 847 866 881 891 903 904 908 913 918 919 925 933 940 948 949 968 972 981 988 992 995 1010 1012 1016 1018 1024 1026 1040 1051 1070 1072 1075 1082 1087 1088 1090 1098

我正在尝试二进制搜索。我希望它将值拆分为:

751 755 762 763 774 777 785 797 798 809 814 817 822 824 827 841 847 866 881 891 903 904 908 913 918 919 925 933 940 948 949 968 972 981 988 992 995 1010 1012 1016 1018 1024 1026 1040 1051 1070 1072 1075 1082 1087 1088 1090 1098 1099 1114 1126 1135 1141 1144 1152 1153 1156 1164 1174 1177 1179 1180 1186 1192 1202 1204 1207 1218 1224 1235 1249 125112531272128912901301302130213151322……(更多15K个数字)

这样我就可以使用以下代码搜索它:

def binarySearch(newdata,number):


    i = 0
    lower = 0
    upper = len(newdata)






    while lower < upper:   
        x = lower + (upper - lower) // 2
        val = newdata[x]
        if number == val:
            return x
        elif number > val:
            if lower == x:   
                break        
            lower = x
        elif number < val:
            upper = x
    return None
def二进制搜索(newdata,number):
i=0
下限=0
上限=len(新数据)
当下部<上部时:
x=下+(上-下)//2
val=newdata[x]
如果number==val:
返回x
elif编号>val:
如果下限==x:
打破
下=x
elif编号
如果二进制文件未排序,我将使用:

#SORT
def sorrt(data):
    result = []
    if len(data) < 2:
        return data
    mid = int(len(data)/2)
    y = sorrt(data[:mid])
    z = sorrt(data[mid:])
    while (len(y)>0) or (len(z)>0):
        if (len(y)>0) and (len(z)>0):
            if y[0] > z[0]:
                result.append(z[0])
                z.pop(0)
            else:
                result.append(y[0])
                y.pop(0)
        elif len(z)>0:
            for i in z:
                result.append(i)
                z.pop(0)
        else:
            for i in y:
                result.append(i)
                y.pop(0)

    return result
#排序
def sorrt(数据):
结果=[]
如果len(数据)<2:
返回数据
mid=int(长度(数据)/2)
y=sorrt(数据[:mid])
z=sorrt(数据[mid:])
而(len(y)>0)或(len(z)>0):
如果(len(y)>0)和(len(z)>0):
如果y[0]>z[0]:
result.append(z[0])
z、 流行音乐(0)
其他:
结果.追加(y[0])
y、 流行音乐(0)
elif len(z)>0:
对于z中的i:
结果.追加(i)
z、 流行音乐(0)
其他:
对于y中的i:
结果.追加(i)
y、 流行音乐(0)
返回结果
所以我的全部代码是:

#BINARY SEARCH
fileName = 'sorted15000.txt'






#SORT
def sorrt(data):
    result = []
    if len(data) < 2:
        return data
    mid = int(len(data)/2)
    y = sorrt(data[:mid])
    z = sorrt(data[mid:])
    while (len(y)>0) or (len(z)>0):
        if (len(y)>0) and (len(z)>0):
            if y[0] > z[0]:
                result.append(z[0])
                z.pop(0)
            else:
                result.append(y[0])
                y.pop(0)
        elif len(z)>0:
            for i in z:
                result.append(i)
                z.pop(0)
        else:
            for i in y:
                result.append(i)
                y.pop(0)

    return result



def binarySearch(newdata,number):


    i = 0
    lower = 0
    upper = len(newdata)





#ACTIVATE
    while lower < upper:   
        x = lower + (upper - lower) // 2
        val = newdata[x]
        if number == val:
            return x
        elif number > val:
            if lower == x:   
                break        
            lower = x
        elif number < val:
            upper = x
    return None


start =0
with open(fileName) as file:  
    data = file.read().split()
start_time = time.clock()


    number = raw_input("What  number?: ")
    start_time  

    newdata = sorrt(data)


    pos = binarySearch(newdata,number)
    print pos
    print "\nTime: "
    print time.clock() - start_time, "seconds"
#二进制搜索
文件名='sorted15000.txt'
#分类
def sorrt(数据):
结果=[]
如果len(数据)<2:
返回数据
mid=int(长度(数据)/2)
y=sorrt(数据[:mid])
z=sorrt(数据[mid:])
而(len(y)>0)或(len(z)>0):
如果(len(y)>0)和(len(z)>0):
如果y[0]>z[0]:
result.append(z[0])
z、 流行音乐(0)
其他:
结果.追加(y[0])
y、 流行音乐(0)
elif len(z)>0:
对于z中的i:
结果.追加(i)
z、 流行音乐(0)
其他:
对于y中的i:
结果.追加(i)
y、 流行音乐(0)
返回结果
def二进制搜索(新数据,编号):
i=0
下限=0
上限=len(新数据)
#激活
当下部<上部时:
x=下+(上-下)//2
val=newdata[x]
如果number==val:
返回x
elif编号>val:
如果下限==x:
打破
下=x
elif编号

我想精确定位我在变量
number
中搜索的二进制代码的位置。但我得到的是一个很远的位置,例如755返回7565。差不多吧。你知道问题的起因吗?我确信我在这里正确地实现了
.split()

您的算法是正确的,但它们是在字符串上运行的,您需要整数。对于字符串,您将得到
'123'<'5'
。因此,请修正您的输入:

...
data = [int(x) for x in data]
number = int(number)
newdata = sorrt(data)
...

您的算法是正确的,但它们是在字符串上运行的,您需要整数。对于字符串,您将得到
'123'<'5'
。因此,请修正您的输入:

...
data = [int(x) for x in data]
number = int(number)
newdata = sorrt(data)
...

提示:查看
bisect
提示:查看
bisect