2017-01-16 9 views
-1

Ich möchte überprüfen, ob einige Zeichenfolgen in einer Spalte mit zufälliger Größe dupliziert werden. Wenn ja, sollte python ausdrucken, in welcher Zeile der Fehler beobachtet wird.Überprüfen Sie auf Duplikate in der Liste der Zeichenfolgen

Mein Code ist wie folgt:

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 "" 

Aber es funktioniert nicht, da i nicht definiert ist.

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

NameError: name 'i' is not defined

Ich benutze Python 3.5.

+0

Warum denken Sie einen Screenshot von Ihrem Code wäre nützlich? Code ist Text, bitte geben Sie ihn als solchen an - [mcve]. – jonrsharpe

+0

Ich hatte den Code nicht verfügbar, ich hatte nur den Screenshot zur Verfügung. Ich habe meine Frage jetzt bearbeitet, also ist der Code enthalten :) – Jacob

Antwort

0

Abgesehen von der Ausnahme ist Ihr Ansatz ein bisschen zu kompliziert. Zum Beispiel benötigen Sie nur einen Durchlauf über die Daten:

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 

Ihre Ausnahme tritt auf, wenn Sie versuchen, Schleifenvariablen des Verstehens auch außerhalb ihres Anwendungsbereichs für den Zugriff auf (was unmöglich ist, zumindest in Python-3.x). Sobald Ihr Verständnis abgeschlossen ist, können Sie nicht mehr auf die i zugreifen.

Deshalb habe ich eine explizite for -loop verwendet. Auf diese Weise können Sie auf die Schleifenvariablen zugreifen.


Wenn Sie wirklich faul sein wollen Sie auch eine Funktion von einem externen Modul, das ich verfasst verwenden: 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) 
Verwandte Themen