2

ですから、ネストされたループにとらわれて、半分の時間でそれらを理解しているように感じます。その後、別の問題に取り組み始め、それからもう理解できなくなります。多分私は物事を複雑にしすぎています。とにかく私の問題に戻って、私は単位行列を持っています

lst = [[1,0,0], [0,1,0], [0,0,1]]

単位行列かどうかをチェックするプログラムを作成しようとしているので、iとjのインデックスが同じインデックス(つまり、位置0のiと位置0のj、位置1のi)を持っていることがわかります。 jは位置1、iは位置2、jは位置2)であり、1に等しい場合、行列は単位行列になります。今の私の問題は、これをコンピューターに明確に表現するのに苦労しているような気がすることです。つまりlst[0][0], lst[1][1] and lst[2][2]、すべて1に等しく、他のすべての値は0に等しい必要があります。私に答えを与えずに、誰かが私を正しい方向に動かすことができるでしょうか?私はこれを約2週間解決しようとしてきましたが、とても単純に見えるので解決できないことに不満を感じています...

ありがとう。

def identity(lst):
for i in lst:
    for j in i:
        if i == j and lst[i][j] == 1:
                if i != j and lst[i][j] == 0:
                    return True

return False

私はどこが間違っているのか間違っていますか?

わかったと思います!!

def identity(lst):
size = len(lst)
for i in range(len(lst)):
    if len(lst[i]) != size:
        return False
    for j in range(len(lst)):
        if i == j and lst[i][j] != 1:
            return False
        elif i != j and lst[i][j] != 0:
            return False

return True

iとjの印刷:

for i in range(len(lst)):
     for j in range(len(lst)):
         print("i:", i, "j:", j)

をもたらしました:

i: 0 j: 0
i: 0 j: 1
i: 0 j: 2
i: 1 j: 0
i: 1 j: 1
i: 1 j: 2
i: 2 j: 0
i: 2 j: 1
i: 2 j: 2

これは本当に私を大いに助けました!

4

4 に答える 4

1

それはあなたがたくさん使うつもりなので、あなたはそれをクラスにすることができます。

class Identity3(object):
  matrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
  def __eq__(self, other):
    return self.matrix == other
  def __new__(self):
    return [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
  def __init__(self):
    pass

そのように使ってみてください、

>>> translate = [[1, 0, 0], [0, 1, 0], [1, 1, 1]]
>>> translate == Identity()
False
>>> idmatrix = Identity()
>>> idmatrix
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
于 2012-11-10T17:18:25.143 に答える
1

まず最初に、インデントが壊れているようです。特にPythonでは、常に正しくインデントする必要があります。そのはず:

def identity(lst):
    for i in lst:
        for j in i:
            if i == j and lst[i][j] == 1:
                if i != j and lst[i][j] == 0:
                    return True
    return False

第二に、あなたはあなたが思っている方法で要素にアクセスしていません。先に進んで、ループ内に次のように印刷します。

for i in lst:
    for j in i:
        print "i:", i, "j:", j
    print

私は得る:

i: [1, 0, 0] j: 1
i: [1, 0, 0] j: 0
i: [1, 0, 0] j: 0

i: [0, 1, 0] j: 0
i: [0, 1, 0] j: 1
i: [0, 1, 0] j: 0

i: [0, 0, 1] j: 0
i: [0, 0, 1] j: 0
i: [0, 0, 1] j: 1

行列のインデックスを反復処理する必要がある場合は、 range(またはxrange)関数とlen関数を組み合わせて使用​​できます。

最後に、条件文はこのように意味がありません

if i == j and lst[i][j] == 1:
    if i != j and lst[i][j] == 0: # you never reach below here 
        return True               # because i == j is always true in here
                                  # provided by the first conditional

これらの条件を分離する必要があります。return Trueそれを行っても、1つの要素だけが条件を満たしている(つまり、1つの要素だけが正しい場所にある)場合でも、間違った答えが返されます。私はあなたが逆の方法でreturn False、条件文で(そしてしばしばそれらをそれぞれ変更することを忘れないでください)そしてreturn Trueあなたがエラーを見つけなければ最終的に考える必要があると信じています。

あなたの進歩を教えてください、私はあなたにもっとヒントを与えることができます。

于 2012-11-10T18:15:32.267 に答える
0

答え全体ではなく、ヒントだけが必要なので、対角線上のすべての要素は1である必要があります。マトリックス内のすべての要素の合計は、対角線のサイズと等しくなければなりません。

于 2012-11-10T18:19:37.860 に答える
-1

もう少し具体的に言うと、i!= j、lst [i] [j]==0の場合も確認することを忘れないでください。

于 2012-11-10T16:56:26.283 に答える