【问题标题】:Check for duplicates in list of strings检查字符串列表中的重复项
【发布时间】:2017-05-31 18:34:19
【问题描述】:

我想检查列中是否有一些随机大小的字符串重复。如果是,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。

【问题讨论】:

  • 为什么你认为你的代码截图会有用?代码是文本,请提供 - minimal reproducible example.
  • 我没有可用的代码,我只有可用的屏幕截图。我现在编辑了我的问题,所以包含了代码:)

标签: python python-3.x numpy duplicates


【解决方案1】:

除了例外,您的方法有点太复杂了。例如,您只需要一次遍历数据:

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

【讨论】:

    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2019-11-17
    • 2011-03-17
    • 2015-05-05
    相关资源
    最近更新 更多