我有一个包含多行的文件,每行有超过20个数值,例如:
123 1 18 180776 4303656 1605 16468 0 51429 24230 0 0 0 4 8 0 8710 14705 1836 1 4 95 0 24538 0 187860 4264028 449 4711 0 2537 2537 0 0 5 0 0 0 6138 12880 1590 1 22 76 ...
我想:
所以在一行(带数字)后我应该:
将每个数字与同一列中的前一个数字进行比较,存储结果但我可以忘记上一行。
哪种数据类型最适合存储在数据之上?
答案 0 :(得分:4)
通常你会使用list
作为
当您在变量中读取一行时,请说出row
row.split()
会给你一个list
,但每个元素都是一个字符串,你需要数字。你可以使用像这样的列表理解来获得一个数字列表(看起来它们都是整数)
[int(x) for x in row.split()]
您还可以使用列表推导与sth
这只会过滤掉<某物
[int(x) for x in row.split() if int(x)<sth]
这将返回bool
的列表,其中True
表示相应的项目是&lt; sth
[int(x)<sth for x in row.split()]
答案 1 :(得分:2)
如果不了解您将如何处理汇总信息,很难说哪种数据类型最佳。但是,一个简单的解决方案是使用每行的列表,包含带有实际数字的2元组和带有属性的字典:
line = [(1, {'even': False, 'foo': 'bar'}), ..., (2332, {'even': True, 'foo': 'baz'}), ...]
以下是如何从一行文字开始获取此列表:
line = "4 0 2837 9323 ..."
line = [(int(n), dict()) for n in line.split()]
然后迭代列表并设置属性:
for n, attributes in line:
...
attributes['foo'] = 'bar'
答案 2 :(得分:0)
标准数据类型应该适用于大多数用途:即list
或tuple
。如果您要就地更改值,请使用list
。
你应该可以做这样的事情(未经测试的代码):
all_the_lines = []
with open("filename.txt", 'r') as f:
for line in f:
data = [int(x) for x in line.split()]
# do something with the data if you want
all_the_lines.append(data)
在此之后,all_the_lines将保存list
个list
个原始数据(转换为整数)。您需要弄清楚如何保存要保存的其他信息:例如,指向超过特定数字的所有元素的指针。您可以在上面或之后的循环中计算所有这些。
如果您想对数字执行重要的数学计算(听起来不是这样),请考虑使用array
包中的numpy
来代替。
答案 3 :(得分:0)