Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中初始化数组中的实例列表_Python_Arrays_List_Class_Instantiation - Fatal编程技术网

在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个)用于创建以下类的实例 我有一个代表时间的类:

我是Python新手,所以这个问题的答案可能很简单。我以前做过一些编码,但大部分都忘了

我有一个值列表,从如下文件中获取:

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中工作,所以我可能错了。非常感谢,这正是我所需要的