如何分离数组并根据它们在数组中的索引添加它们?

2024-05-14 10:08:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个工资计算器,其中用户插入一个.txt文件,程序计算工作小时数

到目前为止,我能把名字、工资值和工时分开,但我不知道如何把工时加在一起

所以我想要的结果是:

员工姓名 工资(他们挣多少钱) 每个员工增加的小时数

这是数据集(txt的文件名是->;emp.txt):

(编辑:格式混乱,所以这里有一个文本截屏:enter image description here

Spencer 12.75   8   8   8   8   10
Ruiz    18  8   8   9.5 8   8
Weiss   14.80   7   5   8   8   10
Choi    15  4   7   5   3.3 2.2
Miller  18  6.5 9   1   4   1
Barnes  15  7.5 9   4   0   2

预期结果:

'Spencer', 'Ruiz', 'Weiss', 'Choi', 'Miller', 'Barnes'
'12.75', '18', '14.80', '15', '18', '15'
'42', '41.5', ... and so on

当前代码:

infile = open("empwages.txt","r")
masterList = infile.readlines()

nameList = []
hourList = []
plushourList = []
for master in masterList:
    nameList.append(master.split()[0])
    hourList.append(master.split()[1])
    x = 2
    while x <= 6:
        plushourList.append(master.split()[x])
        x += 1


print(nameList)
print(hourList)
print(plushourList)

Tags: mastertxt员工plussplitprintspencerappend
3条回答

尝试使用zip

with open("empwages.txt") as f:
    lines = [line.split() for line in f]
    names, hours, *more_hours = zip(*lines)
    print(names)
    print(hours)
    print([sum(map(float, i)) for i in zip(*more_hours)])

('Spencer', 'Ruiz', 'Weiss', 'Choi', 'Miller', 'Barnes')
('12.75', '18', '14.80', '15', '18', '15')
[42.0, 41.5, 38.0, 21.5, 21.5, 22.5]

这将:

  • 按行拆分文件,按单词拆分行
  • 把每行的第一个单词放在names,第二个放在hours,其余的放在几个小时内

您可以根据需要在*_之前添加更多变量

(编辑为正确计算小时数)

熟悉unpacking a list in Python的概念是很有用的。您可以使用以下代码来解决问题:

names = []
hours = []
more_hours = []
with open('empwages.txt') as f:
    for line in f:
        name, hour, *more_hs = line.split()
        names.append(name)
        hours.append(hour)
        more_hours.append(more_hs)

print(*names, sep=', ')
print(*hours, sep=', ')
print(*[sum(float(q) for q in e) for e in more_hours])

如果您需要您要求的字符串:

names = []
hours = []
more_hours = []
with open('empwages.txt') as f:
    for line in f:
        name, hour, *more_hs = line.split()
        names.append(name)
        hours.append(hour)
        more_hours.append(more_hs)

print(more_hours)

names = ', '.join(names)
hours = ', '.join(hours)
more_hours = ', '.join(str(s) for s in [sum(float(q) for q in e) for e in more_hours])


print(names)
print(hours)
print(more_hours)

输出

Spencer, Ruiz, Weiss, Choi, Miller, Barnes
12.75, 18, 14.80, 15, 18, 15
42.0 41.5 38.0 21.5 21.5 22.5

如果你不反对使用pandas

import pandas as pd
from StringIO import StringIO
import re

initial_data = '''Spencer 12.75   8   8   8   8   10
Ruiz    18  8   8   9.5 8   8
Weiss   14.80   7   5   8   8   10
Choi    15  4   7   5   3.3 2.2
Miller  18  6.5 9   1   4   1
Barnes  15  7.5 9   4   0   2'''

df = pd.read_csv(StringIO(re.sub(r'[ ]+', ',', initial_data, flags=re.M)), header=None)
print(df)
     0      1    2  3    4    5     6
0  Spencer  12.75  8.0  8  8.0  8.0  10.0
1     Ruiz  18.00  8.0  8  9.5  8.0   8.0
2    Weiss  14.80  7.0  5  8.0  8.0  10.0
3     Choi  15.00  4.0  7  5.0  3.3   2.2
4   Miller  18.00  6.5  9  1.0  4.0   1.0
5   Barnes  15.00  7.5  9  4.0  0.0   2.0

然后您可以快速对列求和,如下所示:

df.loc[:, 1:].sum(axis=1)
0    54.75
1    59.50
2    52.80
3    36.50
4    39.50
5    37.50
dtype: float64

相关问题 更多 >

    热门问题