Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Python 3.x_List_Sum_Jupyter Notebook - Fatal编程技术网

Python 对包含字符串和整数的列表中的元素求和,并将答案放入另一个列表中

Python 对包含字符串和整数的列表中的元素求和,并将答案放入另一个列表中,python,python-3.x,list,sum,jupyter-notebook,Python,Python 3.x,List,Sum,Jupyter Notebook,我必须写一个代码,将列表中每个学生的成绩相加,然后返回总数。 我的代码是: 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:

我必须写一个代码,将列表中每个学生的成绩相加,然后返回总数。 我的代码是:

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]

那么我的代码有什么问题


在第二个循环中,您再次循环整个初始列表1,因此您总是附加所有的总和。如果您的列表确实总是包含一个名称和三个等级,您可以取消第二个循环,只使用第一个循环中的“i”作为求和的迭代器,方式与您现在所做的相同。

您可以使用单循环:

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]
['student1', 30, 'student2', 60, 'student3', 100, 'student4', 150]
['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]
然后:

输出:

['student1', 70, 'student2', 80, 'student3', 90, 'student4', 60]
['student1', 30, 'student2', 60, 'student3', 100, 'student4', 150]
['student1', 70, 'student2', 80, 'student3', 90, 'student4', 60]
试一试

输出

产生

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

代码中的第二个for循环遍历列表中的每个元素,并在索引mod 4为1时执行操作。不需要两个for循环。

它是这样的:0、4、8,所以不需要第二个for循环

你已经知道数字在哪里了。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)

这里有一个解决方案,你不需要担心学生的科目分数

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] 

然后将4替换为实际的+1个marks@Alderven我猜Dirtybit的意思是,如果每个学生都有不同的科目分数,则表示学生1的科目分数为4,学生2的科目分数为3,依此类推,您可以检查其类,如:cur\u sum=0 cur=list[I],而不是isinstancecur,str:cur\u sum+=list[I]@脏兮兮的是你问阿尔德文的吗