请教:数据类型的选用问题

请教:数据类型的选用问题

我有大量的类似如下的测量数据需要处理:

QUOTE:
20070425 02:21   17704     4070       56         4.33    15      2       13      19      4
20070425 02:31   18563     4403       62         3.61    12      7       8       16      7
20070425 02:41   18627     4579       51         3.92    11      6       9       15      8
20070425 02:51   18724     4666       28         4.54    12      6       10      15      6
20070425 03:01   18668     4681       54         3.65    9       2       12      12      7
20070425 03:11   18562     4690       35         3.32    11      6       9       12      7
20070425 03:21   18411     4701       47         4.24    10      5       8       10      7
20070425 03:31   18209     4707       48         3.97    10      6       8       10      7
20070425 03:41   18059     4710       50         4.85    9       2       12      9       7
20070425 03:51   17993     4719       32         4.76    9       5       7       11      6
20070425 04:01   17690     4715       42         4.85    9       1       10      9       5
20070425 04:11   17492     4726       25         4.40    9       4       7       9       6
20070425 04:21   17394     4727       30         4.44    8       4       6       10      5
20070425 04:31   17280     4752       26         4.36    7       4       6       8       6
。。。。

数据的第一第二列是有规律的日期和时间,其他列是无规律的测量数值。如果我用python的list来存储这些数据的话,哪将会有非常多的重复数据,如日期和时间等:

QUOTE:
[['20070425', '01:01', '74835', '5001', '104', '3.12', '29', '5', '28', '29', '27'], ['20070425', '01:11',
'72494', '4987', '38', '4.51', '25', '10', '20', '24', '26'], ['20070425', '01:21', '70446', '4976', '49'
, '4.97', '24', '4', '25', '26', '24'], ['20070425', '01:31', '68390', '4945', '48', '3.49', '25', '8', '2
5', '22', '24'], ['20070425', '01:41', '16566', '2358', '185956', '4.93', '8', '7', '9', '0', '23'], ['200
70425', '01:51', '24479', '4649', '127675', '5.23', '17', '9', '13', '17', '16'], ['20070425', '02:01', '2
0423', '4188', '41109', '5.07', '23', '7', '10', '3', '8'], ['20070425', '02:11', '18112', '4195', '5902',
'4.72', '20', '6', '11', '20', '0'], ['20070425', '02:21', '17704', '4070', '56', '4.33', '15', '2', '13'
, '19', '4'], ['20070425', '02:31', '18563', '4403', '62', '3.61', '12', '7', '8', '16', '7'], ['20070425'
, '02:41', '18627', '4579', '51', '3.92', '11', '6', '9', '15', '8'], ['20070425', '02:51', '18724', '4666
', '28', '4.54', '12', '6', '10', '15', '6'], ['20070425', '03:01', '18668', '4681', '54', '3.65', '9', '2
', '12', '12', '7'], ['20070425', '03:11', '18562', '4690', '35', '3.32', '11', '6', '9', '12', '7'], ['20
070425', '03:21', '18411', '4701', '47', '4.24', '10', '5', '8', '10', '7'], ['20070425', '03:31', '18209'
, '4707', '48', '3.97', '10', '6', '8', '10', '7'], ['20070425', '03:41', '18059', '4710', '50', '4.85', '
9', '2', '12', '9', '7'], ['20070425', '03:51', '17993', '4719', '32', '4.76', '9', '5', '7', '11', '6'],
['20070425', '04:01', '17690', '4715', '42', '4.85', '9', '1', '10', '9', '5'], ['20070425', '04:11', '174
92', '4726', '25', '4.40', '9', '4', '7', '9', '6']]

请问各位有什么好的数据结构来存储这类数据?

你需要其中的哪些数据?
当然所有的数据都需要。我的问题是怎样的数据结构才能最有效率,避免不必要的重复。


QUOTE:
原帖由 Hex 于 2007-5-29 22:19 发表
当然所有的数据都需要。我的问题是怎样的数据结构才能最有效率,避免不必要的重复。

哪些数据是你认为重复的?你期望将不重复的数据整理什么样子?
比如说日期和时间。这些数据是每隔十分钟采集一次,每一天第一列数据就会重复144次,到第二天,第二列的时间又会和昨天的数据重复。
可以把时间转化为秒, 即C语言中的time_t类型。
然后再采用行程压缩(十分简单的压缩规则)存储, 如果以把以十分钟为一个单位的步长pack成一个char, 应该能省下不少空间。


QUOTE:
原帖由 Hex 于 2007-5-30 09:51 发表
比如说日期和时间。这些数据是每隔十分钟采集一次,每一天第一列数据就会重复144次,到第二天,第二列的时间又会和昨天的数据重复。

采集的操作是写入到文本文件中?如果是文件,做个文件转换工具,删除你认为重复的字段。一般操作是逐行读入源文件,做字串处理后再写出到目标文件。
逐行读入源文件时,将该行文本视为一个大的字符串,直接使用字符串自备的分割函数方法生成一个list,再将list按照你需要的格式组合成一个大字符串(即一行文本)写到目标文件中。
采集的操作如果不是写入到文件,大致也需要在内存中构造一个文件对象暂时存储这些数据,剩下的处理流程就同上了。



QUOTE:
原帖由 broader 于 2007-5-30 18:49 发表

采集的操作是写入到文本文件中?如果是文件,做个文件转换工具,删除你认为重复的字段。一般操作是逐行读入源文件,做字串处理后再写出到目标文件。
逐行读入源文件时,将该行文本视为一个大的字符串,直接使用 ...

谢谢! 我现在做的正是这些工作,目前从文件中读入源文件,或写到目标文件都没太大问题。只是在对这些数据进行处理时,这些数据需要放在内存里,需要一个怎样的数据结构来存储这些数据才能做到节省内存而又方便引用? 目前我的一个基本想法是以时间为横坐标,日期为纵坐标做一张表,两个坐标就可以指向某天某时刻的测量数据(一个list),在python里应该怎样实现呢? 用字典吗?但好像字典不支持二维参数吧? 或者说在python里如何实现类似VB或C的多维数组的数据结构?


QUOTE:
原帖由 Hex 于 2007-5-31 17:40 发表


用字典吗?但好像字典不支持二维参数吧?

用tuple做key可以吗?  {(x,y):a}


QUOTE:
原帖由 Hex 于 2007-5-31 17:40 发表


谢谢! 我现在做的正是这些工作,目前从文件中读入源文件,或写到目标文件都没太大问题。只是在对这些数据进行处理时,这些数据需要放在内存里,需要一个怎样的数据结构来存储这些数据才能做到节省内存而又方便 ...

如果是指如何用数据结构表示,可以用嵌套的list表示,例如:
>>>z1 = ['20070425','01:01',(1,2,3)]
>>> z2 = ['20070425','02:01',(1,2,3)]
>>> z1 == z2
False

如果希望判断内存中数据对象被处理的速度快一些,那需要查一下相关资料确定那种数据对象处理快,转换成那种数据对象处理即可。