总结包含字符串和整数的列表中的元素,然后将答案放在另一个列表中



我必须编写一个代码来概括列表中每个学生的成绩并返回总数。我的代码是:

list=['student1',10,20,40,'student2',20,20,40,'student3',20,30,40,'student4',20,10,30]
list2=[]
for i in range(0,len(list1),4):
    list2.append(list1[i])
    for j in range(len(list1)):
        if j%4 == 1:
            sum= list1[j]+list1[j+1]+list1[j+2]
            list2.append(sum)
print(list2)

预期的输出应像:

['student1', 70, 'student2', 80,'student3', 90, 'student4', 60]

但是我得到了此输出:

['student1', 70, 80, 90, 60, 'student2', 70, 80, 90, 60, 'student3', 70, 80, 90, 60, 'student4', 70, 80, 90, 60]

那么我的代码怎么了?

您可以使用单个循环进行操作:

lst = ['student1', 10, 20, 40, 'student2', 20, 20, 40, 'student3', 20, 30, 40, 'student4', 20, 10, 30]
result = []
for i in range(0, len(lst), 4):
    result.extend((lst[i], sum(lst[i+1:i+4])))

输出:

['student1', 70, 'student2', 80, 'student3', 90, 'student4', 60]

如果学生之间的分数数量不同,例如:

lst = ['student1', 10, 20, 'student2', 10, 20, 30, 'student3', 10, 20, 30, 40, 'student4', 10, 20, 30, 40, 50]

然后:

s = 0
result = [lst[0]]
for i in lst[1:]:
    try:
        s += int(i)
    except ValueError:
        result.extend((s, i))
        s = 0
result.append(s)

输出:

['student1', 30, 'student2', 60, 'student3', 100, 'student4', 150]

在第二个循环中您再次循环整个初始列表1,因此您始终将所有总和附加。如果您的列表确实总是包含一个名称和三个等级,则可以摆脱第二个循环,然后从第一个循环中使用" i"作为总和的迭代器,就像现在相同的方式。

list1=['student1',10,20,40,'student2',20,20,40,'student3',20,30,40,'student4',20,10,30]
list2=[]
for i in range(0,len(list1),4):
    list2.append(list1[i])
    sum= list1[i+1]+list1[i+2]+list1[i+3]
    list2.append(sum)
print(list2)

产生

['student1', 70, 'student2', 80, 'student3', 90, 'student4', 60]

代码中的第二个循环浏览列表中的每个元素,并在索引mod 4为1时采取行动。您不需要两个循环。

它是这样的:0、4、8,因此您不需要第二个循环。

您已经知道数字在哪里。(i 1,i 2,i 3),我是学生的名字。

list1=['student1',10,20,40,'student2',20,20,40,'student3',20,30,40,'student4',20,10,30]
list2=[]
for i in range(0, len(list1), 4):
    list2.append(list1[i])
    sum = list1[i+1]+list1[i+2]+list1[i+3]
    list2.append(sum)
print(list2)

尝试

in_lst = ['student1', 10, 20, 40, 'student2', 20, 20, 40, 'student3', 20, 30, 40, 'student4', 20, 10, 30]
out_lst = []
for x in range(0, len(in_lst), 4):
    student_entry = in_lst[x:x + 4]
    out_lst.append(student_entry[0])
    out_lst.append(sum(student_entry[1:]))
print(out_lst)

输出

['student1', 70, 'student2', 80, 'student3', 90, 'student4', 60]

这是解决方案,您不必担心学生的no sbject分数。

list1=['student1',10,20,40,'student2',20,20,40,'student3',20,30,40,'student4',20,10,30]
student_name =[]
student_name_index =[]
for i in range(len(list1)):        
    if type(list1[i]) == int:
        pass
    else:
        student_name.append(list1[i])
        student_name_index.append(i)
student_name_index.append(len(list1)-1)
total_marks=[]
for i in range(1,len(student_name_index)):
    total_marks.append(sum(list1[student_name_index[i-1]+1:student_name_index[i]]))
final_result =[]
for name, mark in zip(student_name,total_marks):
    final_result.append(name)
    final_result.append(mark)
print(final_result)
# output ['student1', 70, 'student2', 80, 'student3', 90, 'student4', 30] 

最新更新