копировать элементы из первого списка на основе значения из второго списка в Python - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть два следующих списка.

marks = [120, 80, 150, 130, 140, 130, 220]
student = ["Joe", "Zoe", "Zoe", "Joe", "Zoe", "Joe", "Zoe"]

Я хочу извлечь элементы из списка 1 на основе элемента «Джо» из списка 2, а затем взять среднее значение из извлеченных значений. Как я могу сделать это, используя циклическое или списочное понимание.

Например, извлеките 120, 130 и 130 из списка marks, данного студенту Joe.

Ответы [ 3 ]

1 голос
/ 03 ноября 2019

Вы можете сжать два списка вместе и сохранить оценки для студентов в диктовке. Затем, если вы хотите усреднить его, просто найдите количество студентов в списке студентов.

scores = {}
for mark, student in zip(marks, students):
    scores[student] = scores.get(student, 0) + mark

joe_average = scores['Joe'] / students.count('Joe')

Если вы просто хотите получить оценки одного студента в списке, простое понимание будет

[mark for mark, student in zip(marks, students) if student == 'Joe']
0 голосов
/ 03 ноября 2019

Это может помочь

from collections import defaultdict

# Create a dict with empty list as default value.
d = defaultdict(list)

# Initialise the list.
student = ["Joe", "Zoe", "Zoe", "Joe", "Zoe", "Joe", "Zoe"]
marks = [120, 80, 150, 130, 140, 130, 220]

# Iterate list with enumerate.
for idx, e in enumerate(student):
    d[e].append(idx)

# Print out the occurrence of 'Joe'. 
res = d['Joe']  

sum_marks=0
for i in res :
    sum_marks += marks[i]

# Prin the output expected
print sum_marks/len(res)
0 голосов
/ 03 ноября 2019

Вы можете получить это среднее значение следующим образом:

joes_marks = [m for m, s in zip(marks, student) if s == 'Joe']
sum(joes_marks) // len(joes_marks)
# 126
...