在Python中初始化数组中的实例列表
我是Python新手,所以这个问题的答案可能很简单。我以前做过一些编码,但大部分都忘了 我有一个值列表,从如下文件中获取:在Python中初始化数组中的实例列表,python,arrays,list,class,instantiation,Python,Arrays,List,Class,Instantiation,我是Python新手,所以这个问题的答案可能很简单。我以前做过一些编码,但大部分都忘了 我有一个值列表,从如下文件中获取: podela = fobj.read().split() podela = [(4, 12, 32, 54), (16, 20, 12, 32)] # [(day, hour, minute, second),] 有10个值作为一个整体表示一些数据。这10个值重复N次。所以,Nx10值加在一起。只有一些值(10个值中的4个)用于创建以下类的实例 我有一个代表时间的类:
podela = fobj.read().split()
podela = [(4, 12, 32, 54), (16, 20, 12, 32)]
# [(day, hour, minute, second),]
有10个值作为一个整体表示一些数据。这10个值重复N次。所以,Nx10值加在一起。只有一些值(10个值中的4个)用于创建以下类的实例
我有一个代表时间的类:
class Vreme:
day = 0
hour = 0
minute = 0
second = 0
def __init__(self, day, hour, minute, second):
self.day = day
self.hour = hour
self.minute = minute
self.second = second
def __init__(self):
self.day = 0
self.hour = 0
self.minute = 0
self.second = 0
def toString(self):
s = repr(self.day)+'-'+repr(self.hour)+':'+repr(self.minute)+':'+repr(self.second)
return s
def print(self):
s = self.toString()
print(s)
如何使用listpodela实例化Vreme的实例列表
EDIT1:podela保存值,这些值是字符串格式的十六进制表示形式
文件示例的一部分,4行:
4a 02 f6 01 00 04 0e 08 03 00
4a 02 f6 01 00 04 0e 08 04 00
49 02 f6 01 00 04 0e 08 04 00
49 02 f5 01 00 04 0e 08 04 00
4a 02 f6 01 00 04 0e 08 05 00
拆分后的podela,最后几个值:
'0e', '12', '1f', '00', '49', '02', 'f4', '01', '00', '04', '0e', '12', '20', '00', '49', '02', 'f5', '01', '00', '04', '0e', '12', '20', '00', '48', '02', 'f4', '01', '00', '04', '0e', '12', '20', '00', '4a', '02', 'f4', '01', '00', '04', '0e', '12', '21', '00', '49', '02', 'f5', '01', '00', '04', '0e', '12', '21', '00', '4a', '02', 'f5', '01', '00', '04', '0e', '12', '22', '00', '49', '02', 'f5', '01', '00', '04', '0e', '12', '22', '00', '48', '02', 'f4', '01', '00', '04', '0e', '12', '22', '00', '4a', '02', 'f6', '01', '00', '04', '0e', '12', '23', '00', '48', '02', 'f4', '01', '00', '04', '0e', '12', '23', '00']
输入文件(对于podela进行拆分)为56kB,但这是一个测试文件。真正的文件将是5MB+
EDIT2:输入和输出示例
示例是一个非常小的文件,其中包含3x10个值
该文件包含以下值:
00 00 00 00 00 00 00 00 00 00
01 02 03 04 05 06 07 08 09 10
11 11 11 11 11 11 11 11 11 11
制作podela时,这些值中的每一个都是数组的成员
podela = [00 00 00 00 00 00 00 00 00 00 01 02 03 04 05 06 07 08 09 10 11 11 11 11 11 11 11 11 11 11]
假设我为构造函数使用位置0、2、4和8处的值。vreme应为vreme的3个实例列表:
vreme[0] = 00 00 00 00
vreme[1] = 01 03 05 07
vreme[2] = 11 11 11 11
首先,我建议将两个init函数合并为一个函数,如下所示:
class Vreme:
day = 0
hour = 0
minute = 0
second = 0
def __init__(self, day=0, hour=0, minute=0, second=0):
self.day = day
self.hour = hour
self.minute = minute
self.second = second
def toString(self):
s = repr(self.day)+'-'+repr(self.hour)+':'+repr(self.minute)+':'+repr(self.second)
return s
def print(self):
s = self.toString()
print(s)
然后您可以将其实例化为:
vreme = Vreme(*podela[:4])
假设您想要podela的前4个元素
例如:
podela = [1, 2, 3, 4, 5, 6]
vreme = Vreme(*podela[:4])
print(vreme.day)
# 1
print(vreme.hour)
# 2
print(vreme.minute)
# 3
print(vreme.second)
# 4
也许您可以将它们添加到
for
循环中
vreme_instances = []
for i in podela:
vreme_instances.append(Vreme(i[0], i[2], i[4], i[8]))
# change indexes at the line above as you need
假设podela
是这样的元组列表:
podela = fobj.read().split()
podela = [(4, 12, 32, 54), (16, 20, 12, 32)]
# [(day, hour, minute, second),]
编辑 要实现上述结果,请首先更改此选项
podela = fobj.read().split()
对此
lines = fobj.read().splitlines() # first: split input file into lines
podela = [x.split() for x in lines] # second: split every line to values
这将为您提供N个子列表的列表:
[
['4a', '02', 'f6', '01', '00', '04', '0e', '08', '03', '00'],
['4a', '02', 'f6', '01', '00', '04', '0e', '08', '04', '00'],
['49', '02', 'f6', '01', '00', '04', '0e', '08', '04', '00'],
['49', '02', 'f5', '01', '00', '04', '0e', '08', '04', '00'],
]
每个子列表代表一个Vreme
实例。podela
看起来像什么?请发布一个示例。为什么您有两个\uuuu init\uuuu
方法?那么您的示例的哪一部分表示天、分钟等?@IvanVinogradov我有两个init,因为我不懂python。我尝试了不同的东西,从那时起。如我所见,我只需要一个构造函数。数值位于位置6、7、8和9(天、小时、分钟、秒)。例如,对于第一个包含10个值的数据集,我需要提取04 0e 08 03如何获取vreme列表?我将编辑这个问题,以包括输入/输出示例。我想我可以。我认为有一个“一行”的解决方案。我知道我可以用索引来做,但我觉得这听起来并不“像python”。另一方面,我几乎不知道如何在Python中工作,所以我可能错了。非常感谢,这正是我所需要的