2017-01-16 2 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

Помимо исключения, ваш подход является слишком сложным. Например вам нужно только один проход над данными:

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 

Ваше исключение возникает при попытке получить доступ к переменным цикла постижения вне их сферы (что невозможно, по крайней мере, в питон-3.x). Итак, как только ваше понимание закончится, вы больше не сможете получить доступ к 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) 
Смежные вопросы