使用Python

时间:2015-11-03 17:21:35

标签: python arrays python-3.x

我有一个我正在上学的项目,它要求我输入一个给定的数据文件,并对文件中的数据进行多次操作。我遇到的问题是数据是字符串类型和数字。我需要数字为int格式,以便稍后我可以在数学上使用它们,但字符串对于它们的相关性很重要这里是我将使用的输入文本的示例:

example1  10 20 30
example2  40 50 60
example3  70 80 90

我喜欢使用像这样的简单代码在数组中输入变量作为数组:

def inputData():
    bank = []
    with open("example.txt", "r") as file:
        for line in file:   
             bank.append(line.split())
    return bank

这将返回如下结果:

[['example1','10','20','30'],['example2','40','50','60'],['example3','70','80','90']]

我喜欢在数组中作为数组返回,但是当我转换它时,它会删除单个数组并将其作为一个长列表返回。这是我转换的代码:

def readData():
    bank= []
    with open("example.txt", "r") as file:
        for line in file:   
            line = line.split()
            for i in line:
                if i.isdigit() is True:
                    bank.append(int(i))
                else:
                    bank.append(i)
    return bank

是否可以转换输入并将其保存在单个数组中?

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:1)

您必须在循环中初始化一个新的空列表,将split和casted元素附加到它,最后将此列表添加到最终bank

方法.split()正在返回一个列表,这就是您在bank.append(line.split())完成后获得预期结果的原因。

def readData():
    bank= []
    with open("example.txt", "r") as file:
        for line in file:   
            line = line.split()
            sub_bank = []
            for i in line:
                if i.isdigit() is True:
                    sub_bank.append(int(i))
                else:
                    sub_bank.append(i)
            bank.append(sub_bank)
    return bank

此外,i.isdigit()返回一个布尔值,因此您不必编写is True

最后,你应该看看列表理解,这可能会使你的代码更具可读性:

def readData():
    bank = []
    with open("example.txt", "r") as file:
        for line in file:
            bank += [int(i) if i.isdigit() else i for i in line.split()]
    return bank