[英]Check for duplicates in list of strings
我想检查一列中是否有一些随机大小的字符串重复。 如果是,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: 名称 'i' 未定义
我正在使用 python 3.5。
除了例外,您的方法有点太复杂了。 例如,您只需要对数据进行一次传递:
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
当您尝试访问理解范围之外的循环变量时,就会发生异常(这是不可能的,至少在 python-3.x 中)。 因此,一旦您的理解完成,您就无法再访问i
。
这就是我使用显式for
循环的原因。 这样你就可以访问循环变量。
如果你真的很懒惰,你也可以使用我编写的外部模块中的函数: 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.