我有一个我正在上学的项目,它要求我输入一个给定的数据文件,并对文件中的数据进行多次操作。我遇到的问题是数据是字符串类型和数字。我需要数字为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
是否可以转换输入并将其保存在单个数组中?
提前感谢您提供任何帮助
答案 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