python - 在列表中执行二分搜索 - Python

标签 python list binary-search

我正在做计算机课的作业,但我在一个问题上遇到了一些麻烦。问题 1 和问题 2 有点重叠,所以我将发布这两个问题以及我到目前为止的代码。

问题 1:编写一个名为 readCountries 的函数,该函数读取文件并返回国家/地区列表。应从此文件中读取国家/地区,该文件包含国家/地区及其面积和人口的不完整列表。该文件中的每一行代表一个国家/地区,格式如下:

名称、面积(平方公里)、人口

打开文件时,您的函数应该处理可能发生的任何异常。您的函数应该完全读入文件,并将数据分成二维列表。您可能需要根据需要拆分和剥离数据。数字应转换为正确的类型。您的函数应返回此列表,以便您可以在其余问题中使用它。

这是我这部分的代码:

    def readCountries():
        countryList = []
        for line in open('Countries.py', 'r'):
            with open('Countries.py', 'r') as countriesFile:
                countries = countriesFile.read()
                countryList.append(line.strip().split())
        return countryList

问题 2:编写一个名为 getCountry 的函数,该函数采用表示国家/地区名称的字符串作为参数。首先调用问题 1 中的答案来获取国家/地区列表,然后对列表进行二分搜索并打印找到的国家/地区信息。

这是我这部分的代码:

    countryList = readCountries()

    def getCountry(countryList, name):
        lo, hi = 0, len(countryList) - 1
        while lo <= hi:
            mid = lo + (hi - lo) // 2
            country = countryList[mid]
            test_name = country[0]
            if name > test_name:
                lo = mid + 1
            elif name < test_name:
                hi = mid - 1
            else:
                return country
        return countries[lo] if countries[lo][0] == name else None

输出是这样的:['Canada', '9976140.0', '35295770'] 这部分是我所需要的,但我如何让它看起来像这样:Canada ,面积:9976140.0,人口:35295770

最佳答案

嗯,一个明显的问题是这一行:

readCountries() 

应该是这样的:

countryList = readCountries() 

通过让 readCountries 函数返回列表,您已经完成了一半,但您实际上从未将任何内容分配给它返回的内容,因此它只是无处可去。

关于python - 在列表中执行二分搜索 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21617359/

相关文章:

c# - 在列表中使用数组-OOP-通用列表

python - 将值添加到 Python 列表中的列表

binary-search - 使用二分搜索将元素插入到已排序的数组中

java - 如何改进 Java 二分搜索方法来找到给定值的最佳百分位?

python - 如何向 Celery (celerybeat) 动态添加/删除周期性任务

python - ssl.SSLZeroReturnError : TLS/SSL connection has been closed (EOF) (_ssl. c:661)

javascript - Selenium : scraping a page till all the products loaded

python - 在 Python 中使用 or 语句如何节省时间?

python - 将一个数组中的唯一值映射到另一个数组的相应总和

c - 为什么第 12 行被打印了两次?