将“拆分”列表分成几个数组

时间:2012-12-01 23:20:51

标签: python arrays list

我正在尝试完成一个项目,该项目将显示.txt文件中包含的特定列表的年度总销售额。

列表的格式如下:

-lastname, firstname (string)
-45.7 (float)
-456.4 (float)
-345.5 (float)
-lastname2, firstname2 (string)
-3354.7 (float)
-54.6 (float)
-56.2 (float)
-lastname3, firstname3 (string)
-76.6 (float)
-34.2 (float)
-48.2 (float)

等等......实际上,7个不同的“员工”跟着12组“数字”(一年中的几个月)......但是这个例子应该足以让我知道我在尝试什么要做。

我需要输出每个“员工”的具体信息     -员工的名字     -Total Sum(列表中12个数字的总和)

所以我的逻辑带我得出这个结论,但我不知道从哪里开始:

创建7个不同的数组来存储每个“员工”数据。 有了这个逻辑,我需要将主列表拆分成独立的数组,以便我可以使用它们。

如何实现这一目标?而且,如果我没有预定义数量的员工(但定义的格式::“名称”后跟12个月的数字)......我怎样才能做到这一点?

我敢肯定,一旦我知道如何在不同的部分“分割”一个列表 - 每13行一次,我能想出什么?

3 个答案:

答案 0 :(得分:3)

是的,在每第13行,您都有一名员工的信息。

但是,您可以使用列表字典,而不是使用十二个不同的列表,这样您就不必担心员工人数。

您可以在指向每位员工的行数上使用参数。

您可以执行以下操作:

infile = open("file.txt", "rt")

employee = dict()
name = infile.readline().strip()
while name:

    employee[name] = list()

    for i in xrange(1, 12):
        val = float(infile.readline().strip())
        employee[name].append(val)

    name = infile.readline().strip()

访问字典条目的一些方法:

for name, months in employee.items():
    print name
    print months

for name in employee.keys():
    print name
    print employee[name]

for months in employee.values():
    print months

for name, months in (employee.keys(), employee.values()):
    print name
    print months

整个过程如下:

infile = open("file.txt", "rt")

employee = dict()
name = infile.readline().strip()
while name:

    val = 0.0
    for i in xrange(1, 12):
        val += float(infile.readline().strip())
    employee[name] = val

    print ">>> Employee:", name, " -- salary:", str(employee[name])
    name = infile.readline().strip()

对不起,不知怎的(>

答案 1 :(得分:1)

这是选项。 不好,但仍然是粗野的选择。

summed = 0
with open("file.txt", "rt") as f:
    print f.readline() # We print first line (first man) 
    for line in f:
        # then we suppose every line is float.
        try:                             
            # convert to float
            value = float(line.strip())  
            # add to sum
            summed += value              
        # If it does not convert, then it is next person
        except ValueError: 
            # print sum for previous person
            print summed
            # print new name
            print line
            # reset sum
            summed = 0
    # on end of file there is no errors, so we print lst result
    print summed

由于您需要更多灵活性,还有另一种选择:

    data = {} # dict: list of all values for person by person name
    with open("file.txt", "rt") as f:
        data_key = f.readline() # We remember first line (first man)
        data[data_key] = [] # empty list of values
        for line in f:
            # then we suppose every line is float.
            try:                             
                # convert to float
                value = float(line.strip())  
                # add to data
                data[data_key].append(value)
            # If it does not convert, then it is next person
            except ValueError: 
                # next person's name
                data_key = line
                # new list
                data[data_key] = []

问:假设我想向总销售额超过7000(12个月)的员工打印“2%奖金”

for employee, stats in data.iteritems():
    if sum(stats) > 7000:
        print employee + " done 7000 in total sales! need 2% bonus"

答案 2 :(得分:0)

我不会创建7个不同的数组。我会创建某种数据结构来保存一个员工在一种数据类型中的所有相关信息(这是python,但你肯定也可以在python中创建数据结构)。

然后,在处理每个员工的数据时,您所要做的就是遍历一个员工数据元素阵列。这样,跟踪数据的索引就更容易了(或者甚至可以消除对数据的需求!)。

如果您想以某种方式对数据进行排序,这将特别有用。这样,你只需要排序一个数组而不是7个。