0
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.

它应该用标记替换现有值。但是定义行有问题。任何人都知道如何修复?谢谢。

编辑:这是来自 all_marks 的数据示例:

[['一种', '', '', '', '', ''],

['b', '', '', '', '', ''],

['C', '', '', '', '', ''],

['d', '', '', '', '', ''],

['e', '', '', '', '', ''],

['F', '', '', '', '', ''],

['G', '', '', '', '', '']]

我在这里要做的是用标记替换''中的值。

例如, def update(all_marks, 'a', '10', 2, True): 将返回

[['a', '', '10', '', '', ''],

['b', '', '', '', '', ''],

['C', '', '', '', '', ''],

['d', '', '', '', '', ''],

['e', '', '', '', '', ''],

['F', '', '', '', '', ''],

['G', '', '', '', '', '']]

感谢您帮助新手。

4

3 回答 3

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', '', '', '', '', '']]

如果您想更改它,以便 update 仅返回修改后数据的副本,请按以下方式更改函数:

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
于 2012-08-19T10:20:22.153 回答
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

=> 这里的错字,应该是row而不是rows

于 2012-08-19T10:21:50.830 回答
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
于 2012-08-19T10:54:31.803 回答