Python 如何分离数组并根据它们在数组中的索引添加它们?
我正在尝试制作一个工资计算器,其中用户插入一个.txt文件,程序计算工作小时数 到目前为止,我能够将姓名、工资值和工时分开,但我不知道如何将工时相加 因此,我期望的结果是: 雇员姓名 工资(他们挣多少钱 每个员工增加的小时数 以下是数据集(txt文件名为->empSweers.txt): (编辑:格式混乱,因此这里是文本的屏幕抓取: 预期结果:Python 如何分离数组并根据它们在数组中的索引添加它们?,python,arrays,python-3.x,Python,Arrays,Python 3.x,我正在尝试制作一个工资计算器,其中用户插入一个.txt文件,程序计算工作小时数 到目前为止,我能够将姓名、工资值和工时分开,但我不知道如何将工时相加 因此,我期望的结果是: 雇员姓名 工资(他们挣多少钱 每个员工增加的小时数 以下是数据集(txt文件名为->empSweers.txt): (编辑:格式混乱,因此这里是文本的屏幕抓取: 预期结果: 'Spencer', 'Ruiz', 'Weiss', 'Choi', 'Miller', 'Barnes' '12.75', '18', '14.80
'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)
infle=open(“emp.txt”、“r”)
主列表=infle.readlines()
姓名列表=[]
hourList=[]
plushourList=[]
对于主控列表中的主控:
nameList.append(master.split()[0])
hourList.append(master.split()[1])
x=2
当x时,尝试使用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 = []
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)
输出
如果你不反对使用熊猫
:
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
你反对使用<代码>熊猫> /CODE >吗?这将是一个很好的包来考虑这种类型的问题。不确定,最终我将把这部分代码放入TKTETE GUI中,如果我将它实现为TKiTunGUI,会是什么样子?请参阅我的IMGUR以供参考。@jimmyjohn123,你是什么意思?我不明白你的问题。你给我的代码在正常的.py文件中使用时效果很好,但是,我正在尝试将你的代码实现到gui界面中。我无法在更长的时间内使用print(*[sum(float(q)表示q in e)表示e])作为tkinter格式的打印语句。@jimmyjohn123,明白了,您需要字符串。@jimmyjohn123,我更新了答案,现在您可以使用包含字符串的变量,如果您想将它们连接起来,只需使用字符串连接运算符
+
。
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