Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Python 3.x - Fatal编程技术网

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

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

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

到目前为止,我能够将姓名、工资值和工时分开,但我不知道如何将工时相加

因此,我期望的结果是:

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

以下是数据集(txt文件名为->empSweers.txt):

(编辑:格式混乱,因此这里是文本的屏幕抓取:

预期结果:

'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