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からのデータのサンプルは次のとおりです。

[['a'、''、''、''、''、'']、

['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

=>ここでのタイプミス、行ではなく行でなければなりませ

于 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 に答える