一个list.count而不是多个

时间:2018-08-15 20:27:54

标签: python list count

我解析的船员巫婆名单如下:

  

20;机械的; 0; 68

     

21; cook; 0; 43

     

22;科学家; 0; 79

     

23; manager; 1; 65

     

24;机械的; 1; 41

     

现在我想弄清楚如何计算具有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个字符串吗?

2 个答案:

答案 0 :(得分:1)

在循环完成后只打印一行。

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

答案 1 :(得分:-1)

因此,经过一整天的思考,我写了这个并得到了正确的答案(也许有人会觉得这很有帮助):

def total_resist_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)