def update(all_marks, stud_num, mark, column, result):
lines = [l for l in all_marks]
for row in all_marks:
if stud_num in row:
lines[rows][column] = mark
从这里开始,我尝试使用lines[rows][column] = mark
替换该值。
应该用mark替换现有值。 但是定义行有一个问题。 谁知道如何解决? 感谢。
编辑: 以下是all_marks中的数据样本:
[['a','','','','',''],
['b','','','','',''],
['c','','','','',''],
['d','','','','',''],
['e','','','','',''],
['f','','','','',''],
['g','','','','','']]
我想在这里做的是用'标记'替换''中的值。
例如,def update(all_marks,'a','10',2,True):将返回
[['a','','10','','',''],
['b','','','','',''],
['c','','','','',''],
['d','','','','',''],
['e','','','','',''],
['f','','','','',''],
['g','','','','','']]
感谢您帮助新手。
答案 0 :(得分:2)
以下是函数的修改版本,它将按预期返回输出:
def update(all_marks, stud_num, mark, column):
for i in range(len(all_marks)):
if stud_num in all_marks[i]:
all_marks[i][column] = mark
return all_marks
以下是它的工作原理:
>>> marks
[['a', '', '', '', '', ''], ['b', '', '', '', '', ''], ['c', '', '', '', '', ''], ['d', '', '', '', '', ''], ['e', '', '', '', '', ''], ['f', '', '', '', '', ''], ['g', '', '', '', '', '']]
>>> update(marks,'a','10',2)
[['a', '', '10', '', '', ''], ['b', '', '', '', '', ''], ['c', '', '', '', '', ''], ['d', '', '', '', '', ''], ['e', '', '', '', '', ''], ['f', '', '', '', '', ''], ['g', '', '', '', '', '']]
请注意,marks
现已修改
>>> marks
[['a', '', '10', '', '', ''], ['b', '', '', '', '', ''], ['c', '', '', '', '', ''], ['d', '', '', '', '', ''], ['e', '', '', '', '', ''], ['f', '', '', '', '', ''], ['g', '', '', '', '', '']]
如果您想更改它以便更新只返回已修改数据的副本,请按以下方式更改该功能:
def update(all_marks, stud_num, mark, column):
tmp = all_marks
for i in range(len(tmp)):
if stud_num in tmp[i]:
tmp[i][column] = mark
return tmp
答案 1 :(得分:1)
以下是工作代码:
def update(all_marks, stud_num, mark, column, result):
lines = [l for l in all_marks]
for row in range(len(all_marks)):
if all_marks[row][0] == stud_num:
lines[row][column] = mark
以下是解释:
for row in range(len(all_marks)):
=>你不想迭代列表对象(例如['a','','','','','']),而不是列表索引
if stud_num == all_marks[row][0]:
=>这是为了仅检查行的第一个字符,而不是任何字符。
lines[row][column] = mark
=>错误在这里,应该是行而不是行
答案 2 :(得分:0)
对行索引进行循环不如循环行本身那样有效。更多的pythonic方式是
def update2(all_marks,stud_num,mark,column):
for row in all_marks:
if stud_num in row:
row[column] = mark
return all_marks