2017-03-18 13 views
-3

関数y = x ** E%Nをリスト内の数字に(72,36,72,25,72,28、.....)実行しようとしています。空の要素は重要です。整数のリスト、各要素をべき乗する

はTypeError:私はこれをしようとすると

mylist = [[72, 36], ' ', [72, 25], [72, 28], [72, 38], ' ', [72, 28]] 
E = 3233 
N = 17 

for i in mylist: 
    if i != ' ': 
     i[0] = i[0]**E%N 
     i[1] = i[1]**E%N 

私は次のエラーを取得するをstrされなければならない、だから、

+0

"どうしたの?あなたのコードは反パターンがかなり悪いです。そして問題はおそらく、元のリスト要素を変更するのではなく、 'J'という名前を再バインドしていることでしょう。 –

+0

コロンを修正しました。ありがとうございます。反パターンの意味は?申し訳ありません、Pythonには比較的新しい、専門用語に慣れていません。あなたは私が個々に要素を変えなければならないと言っていますか? –

+0

1.変数 'list'を呼び出さないでください。これは組み込み型' list'をシャドウするためです。 2.インデックスをループする代わりに、リスト自体をループする必要があります: 'for J in lst:...'。 3. 'J = J ** E%N'を実行すると、(a)あなたはリストでこれをやっています。あなたは何をしたいのではなく、(b)元のリストを変更するのではなく、 'J'という名前を作り直しています。変更可能なコンテナの種類と再バインドの内容を確認します。私の提案:https://nedbatchelder.com/text/names.html 4. [ask]と[mcve]を読んでください。5.あなたのセパレータは空文字列になっています。 –

答えて

0

int型ではない、私はあなたがIN-実行することを想定し、このコードを思い付い場所の計算:

data = [[72, 36], ' ', [72, 25], [72, 28], [72, 38], ' ', [72, 28]] 
E = 3233 
N = 17 

for sublist in data: 
    if not isinstance(sublist, list): 
     continue 
    for idx, subitem in enumerate(sublist): 
     item[idx] = pow(subitem, E, N) 

print data 

出力:

[[4, 2], ' ', [4, 8], [4, 11], [4, 4], ' ', [4, 11]] 
+0

私は彼があなたが持っているものではなく、 'pow(subitem、e、n)'を望んでいると思った。 –

+0

なぜ多くのdownvotes?私はpowで更新しましたが、彼がpowを望んでいるかどうか、残りの部分に何が間違っているのか分かりません。 –

+0

私は投票していませんでしたが、あなたのコードは彼と実際には一致しましたが、彼は(E%N)を持っていることを疑っていました。 –

1

一般的なPythonの慣用句に従ってください。あなたはそれが間違ってやっているfor i in range(len(l)):をやっている場合は

1)を使用すると、

2)で、内蔵のPythonをオーバーライドしている、あなたのデータlistに名前を付けないでください。 iterable自体をループします。

3)可能であれば、同様の種類をリストに入れてください。ここで

は、私はあなたがやろうとしていると思う何をしてテストされていない例を示します

data = [[72, 36], [], [72, 25], [72, 28], [72, 38], [], [72, 28]] # replaced empty strings with empty lists, maintain type similarity 
E = 3233 
N = 17 

for pair in data: # loop over list itself, not range(len(list)) 
    if pair: # pair is Truthy if the element is NOT an empty list 
     pair[0] = pair[0]**(E%N) 
     pair[1] = pair[1]**(E%N) 

EDIT:あなたは絶対にあなたの元データリストにスペースを維持する必要がある場合:

data = [[72, 36], ' ', [72, 25], [72, 28], [72, 38], ' ', [72, 28]] 
E = 3233 
N = 17 

for pair in data: # loop over list itself, not range(len(list)) 
    if pair != ' ': 
     pair[0] = pair[0]**(E%N) 
     pair[1] = pair[1]**(E%N) 
+0

ペアが真でも ''の場合でも、ペア[0] ...ペア[1] ...の代わりに各要素を反復しない理由最初のリストの形式は、OPは、 "'を維持する必要があると述べた。 –

+0

OPコードには多くの問題があります。そのため、リストにタイプを混在させないなど、代替アプローチを提案します。もちろん、サブリスト内の各要素を反復することは可能ですが、各サブリストが長さ2に制限されている場合は、これがよりわかりやすくなります。 –

関連する問題