Python 在混合数据列表中求和
这是一个具体的问题,将帮助我完成一个即将离任的项目。这很简单,我对Python非常陌生,我的背景主要是艺术。我喜欢,但我也觉得很有挑战性 我有一个文本文件(Data.txt),其中包含数字/名称列表,如下所示(简短示例): 这是一份好坏参半的名单。在每个字符串后面…后面跟着12个数字,依此类推。请注意,这些数字是“float” 我设计了这个:Python 在混合数据列表中求和,python,arrays,list,append,Python,Arrays,List,Append,这是一个具体的问题,将帮助我完成一个即将离任的项目。这很简单,我对Python非常陌生,我的背景主要是艺术。我喜欢,但我也觉得很有挑战性 我有一个文本文件(Data.txt),其中包含数字/名称列表,如下所示(简短示例): 这是一份好坏参半的名单。在每个字符串后面…后面跟着12个数字,依此类推。请注意,这些数字是“float” 我设计了这个: numberList = [] data = [] data = open("SalesData.txt").read().split() for i i
numberList = []
data = []
data = open("SalesData.txt").read().split()
for i in data:
numberList.append(i)
print numberList
这将附加并打印external.txt列表中的所有数据。如何在新列表(numberList)中获取所有数据,但不包括通过读取文件找到的所有“字符串”。这样,我就可以只对这些数字进行求和--尝试以下方法:
tsum = []
for j in numberList:
try: tsum.append(float(j))
except: pass
sum = sum(tsum)
试试这个:
tsum = []
for j in numberList:
try: tsum.append(float(j))
except: pass
sum = sum(tsum)
只需在这些行上迭代,只需将数字添加到列表中
with open("somefile.txt") as f:
my_list = []
for line in f:
try:
my_list.append(float(line))
except ValueError:
pass
print sum(my_list)
只需在这些行上迭代,只需将数字添加到列表中
with open("somefile.txt") as f:
my_list = []
for line in f:
try:
my_list.append(float(line))
except ValueError:
pass
print sum(my_list)
您可以执行类型检查,或者如果数字实际上是字符串中的数字,您可以执行类似于
“13”.isdigit()
检查的操作,但我可能想做一些更聪明的操作:
numberList = []
for i in range(0, len(data)/13):
numberList.append(data[1*(i+1):13*(i+1)])
应该以字符串后面的数字组为目标。这确实取决于您的输入数据不是垃圾数据,但它在大型数据集上的工作速度应该比执行
.isdigit()
或其他类型检查更快。您可以执行类型检查,或者如果数字实际上是字符串中的数字,则可以执行类似于“13”.isdigit()的操作
检查,但我可能想做一些更聪明的事情:
numberList = []
for i in range(0, len(data)/13):
numberList.append(data[1*(i+1):13*(i+1)])
应该以字符串后面的数字组为目标。这确实取决于您的输入数据是否是垃圾数据,但它在大型数据集上的运行速度应该比执行
.isdigit()
或其他类型检查更快。首先,您不应该在文件上执行.read().split()
,这将在任何空格上拆分,而不仅仅是在换行符上拆分。幸运的是,Python可以直接在文件上迭代
然后,您可以尝试将每一行转换为一个浮点数,并仅在可行的情况下将其附加到列表中(否则跳过)。此外,您还可以立即将其转换为浮动-使求和更容易
number_list = []
with open("SalesData.txt") as myfile:
for line in myfile:
try:
number_list.append(float(line))
except ValueError:
pass
print(sum(number_list))
首先,您不应该在文件上执行
.read().split()
,这将在任何空格上分割,而不仅仅是在换行符上。幸运的是,Python可以直接在文件上迭代
然后,您可以尝试将每一行转换为一个浮点数,并仅在可行的情况下将其附加到列表中(否则跳过)。此外,您还可以立即将其转换为浮动-使求和更容易
number_list = []
with open("SalesData.txt") as myfile:
for line in myfile:
try:
number_list.append(float(line))
except ValueError:
pass
print(sum(number_list))
如果您的数据是结构化的(似乎是这样),我只需要使用一个计数器并删除len12的每个序列的第一个元素 下面是一个例子:
numberList = []
data = []
counter = 0
with open("SalesData.txt") as myfile:
for line in myfile:
if counter > 0:
number_list.append(float(line))
counter = (counter + 1) % 12
print numberList
如果您的数据是结构化的(似乎是这样),我只需要使用一个计数器并删除len12的每个序列的第一个元素 下面是一个例子:
numberList = []
data = []
counter = 0
with open("SalesData.txt") as myfile:
for line in myfile:
if counter > 0:
number_list.append(float(line))
counter = (counter + 1) % 12
print numberList
但是如果有一些字母没有ASCII码,那么它就不起作用了
但是,如果有没有ASCII码的字母,它就不起作用了。是的,两个人在同一时间有着相同(正确)的想法。顺便说一句,不需要去掉空白。实际上,在标签是数字的特殊情况下,这可能是错误的。不确定是否有可能发生这种情况OP@lcfseth:如果标签是数字的,你怎么知道它们是标签而不是值?他说这个文件有一个预先定义的模式:1个标签-12个数字,1个标签-12个数字…耶,两个人在同一时间有相同的(正确的)想法。顺便说一句,不需要去掉空白。实际上,在标签是数字的特殊情况下,这可能是错误的。不确定是否有可能发生这种情况OP@lcfseth:如果标签是数字的,你怎么知道它们是标签而不是值?他说文件有一个预先定义的模式:1个标签-12个数字,1个标签-12个数字…我可能错了,但在所有情况下,j最有可能是str或unicode,因为不涉及解析。我可能错了,但在所有情况下,j最有可能是str或unicode,因为不涉及解析。这太棒了!但是我认为第一行有冲突::它是一个字符串,所以它提示我一个错误。有办法绕过它吗?也许将计数器初始化为1,那么它从第2行开始?让我知道任何建议。如果你能正确地指导我,这是我最喜欢的方法!!是的,我将使用您的解决方案中提供的迭代。我们应该一起得到正确的答案:)现在应该可以正常工作了。@mmmaceo:计数器初始化是正确的。正如Tim Pietzcker所指出的,split函数将向集合中添加空值。这就是导致异常的原因。这太棒了!但是我认为第一行有冲突::它是一个字符串,所以它提示我一个错误。有办法绕过它吗?也许将计数器初始化为1,那么它从第2行开始?让我知道任何建议。如果你能正确地指导我,这是我最喜欢的方法!!是的,我将使用您的解决方案中提供的迭代。我们应该一起得到正确的答案:)现在应该可以正常工作了。@mmmaceo:计数器初始化是正确的。正如Tim Pietzcker所指出的,split函数将向集合中添加空值。这就是导致异常的原因。.isdigit()可能是完美的,但我认为它不适用于浮点数。.isdigit()可能是完美的,但我认为它不适用于浮点数?@mmmaceo问题只是一个众所周知的问题,即确定字符串是否可以在浮点数中转换,再加上在文本中重复行的必要性。关于“浮动”字符串的问题,在stackoverflow@mmmaceo这个问题只是一个众所周知的问题,即确定字符串是否可以在浮点中转换,以及是否需要在文本中的行上进行迭代。关于“浮动”一个字符串的问题,有一些关于