2017-01-16 8 views
-1

ランダムなサイズの列の一部の文字列が重複していないかどうかをチェックしたいと思います。そうであれば、pythonはエラーがどの行に記録されているかを出力する必要があります。文字列のリストで重複を確認してください

import numpy as np 
data = np.array([["s154090","Lis",1,0],["s151515","Lars",2,3],["s151515","Preben",1,0],["s154080","Rene",5,7]]) 

def sortGrades(data): 

    studentId = data[:,0] 
    xs = studentId 
    s = set() 
    if any(i in s or s.add(i) for i in xs): 
     s = set() 
     duplicates = set(i for i in xs if i in s or s.add(i)) 
     print("Error in line {},".format(i),"Det følgende Studie ID går igen",duplicates) 
    else: 
     print("Ingen Fejl") 
     return "" 

をしかし、それは動作しませんiが定義されていないため、次のように

私のコードです。

---> 11 print("Error in line {},".format(i),"Det følgende Studie ID går igen",duplicates)

NameError: name 'i' is not defined

私はpython 3.5を使用しています。

+0

は、なぜあなたはあなたのコードのスクリーンショットが有用であろうと考えたのですか?コードはテキストですので、それを提供してください - [mcve]。 – jonrsharpe

+0

私は利用可能なコードを持っていなかった、私は利用可能なスクリーンショットがあった。私は今、私の質問を編集したので、コードが含まれています:) – Jacob

答えて

0

例外的に、あなたのアプローチはちょっと複雑すぎます。たとえば、あなただけのデータの上で1つのパスを必要とする:あなたは(少なくとものpython-3.xの中で、不可能である)、その範囲外の理解のループ変数にアクセスしようとすると、

def sortGrades(data): 
    studentId = data[:,0] 
    xs = studentId 
    s = set() 
    for line, val in enumerate(xs): 
     if val in s: # if the current value was already seen print the error message 
      print("Error in line {},".format(line),"Det følgende Studie ID går igen", val) 
     # Add the value 
     s.add(val) 

>>> sortGrades(data) 
Error in line 2, Det følgende Studie ID går igen s151515 

あなたの例外が発生します。だからあなたの理解が終わったらすぐにiにアクセスすることはできません。

私は明示的にfor -loopを使用しています。そうすれば、ループ変数にアクセスすることができます。


あなたは本当に怠け者になりたい場合は、また、私が執筆した外部モジュールからの機能を使用することができます。iteration_utilities.duplicates

from iteration_utilities import duplicates 
from operator import itemgetter 

for line, val in duplicates(enumerate(data[:,0]), key=itemgetter(1)): 
    print("Error in line {},".format(line),"Det følgende Studie ID går igen", val) 
関連する問題