单身列表.计数而不是多重

2024-05-29 02:17:16 发布

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

一号机组的Im分析列表如下:

20;mechanic;0;68

21;cook;0;43

22;scientist;0;79

23;manager;1;65

24;mechanic;1;41

etc

现在我想知道如何计算有60个或更多耐力的员工的数量(每个员工的最后一个要素)

这是我的密码:

with open('employee.txt', 'r') as employee_list:
    count = 0
    for employee in employee_list.readlines():
        employee_data = employee.rstrip().split(';')
        if int(employee_data[3]) >= 60:
            count += 1
        print(count)

从终端打印:

1

2

3

...

90

我认为答案是正确的,但是有没有办法只得到一个“总数”,而不是一个90度的弦?你知道吗


Tags: 列表data数量countetc员工employeemanager
2条回答

所以经过一天的思考,我写了这篇文章并得到了正确的答案(也许有人会觉得这很有帮助):

def total \u resist \u count():

    # with open('employee.txt', 'r') as employee_list:
    employee_list = [input() for i in range(120)]

    candidates = []

    for employee in employee_list:
        employee_data = employee.rstrip().split(';')
        if int(employee_data[3]) >= 60:
            candidates.append(employee_data)
    return candidates


required_professionals = {
    'computers specialist': 5,
    'cook': 3,
    'doctor': 5,
    'electrical engineer': 4,
    'manager': 1,
    'mechanic': 8,
    'scientist': 14
}

expedition_total = 40
female_min = 21
male_min = 12


def validate_solution(cur_team, num_females, num_males):
    global expedition_total, female_min, male_min
    if sum(cur_team) != expedition_total or num_females < female_min or num_males < male_min:
        return False
    num_of_free_vacancies = 0
    for k in required_professionals:
        num_of_free_vacancies += required_professionals[k]
    if num_of_free_vacancies > 0:
        return False
    return True


TEAM = None


def backtrack(candidates, cur_team, num_females, num_males):
    global required_professionals, expedition_total, TEAM
    if sum(cur_team) > expedition_total or TEAM is not None:
        return
    if validate_solution(cur_team, num_females, num_males):
        team = []
        for i, used in enumerate(cur_team):
            if used == 1:
                team.append(candidates[i])
        TEAM = team
        return

    for i in range(len(candidates)):
        if cur_team[i] == 0 and required_professionals[candidates[i][1]] > 0:
            cur_team[i] = 1
            required_professionals[candidates[i][1]] -= 1
            if candidates[i][2] == '1':
                backtrack(candidates, cur_team, num_females, num_males + 1)
            else:
                backtrack(candidates, cur_team, num_females + 1, num_males)
            required_professionals[candidates[i][1]] += 1
            cur_team[i] = 0


if __name__ == '__main__':
    ec = decode_fcc_message()
    candidates = total_resist_count(ec)
    cur_team = [0] * len(candidates)
    backtrack(candidates, cur_team, 0, 0)
    s = ""
    for t in TEAM:
        s += str(t[0]) + ';'
    print(s)

循环完成后只打印一行。你知道吗

with open('employee.txt', 'r') as employee_list:
    count = 0
    for employee in employee_list.readlines():
        employee_data = employee.rstrip().split(';')
        if int(employee_data[3]) >= 60:
            count += 1
    print(count)

但我也建议使用pandas进行数据操作。例如:

df = pd.read_csv('employee.txt', sep=';')
df.columns = ['col1', 'col2', 'col3', 'stamina']

然后过滤并获得大小:

df[df.stamina >= 60].size

相关问题 更多 >

    热门问题