【问题标题】:Searching for a named tuple in a list of named tuples在命名元组列表中搜索命名元组
【发布时间】:2016-10-10 17:39:40
【问题描述】:

我需要找出给定的命名元组是否存在于命名元组的列表中(命名元组是点,例如“多边形”类中的 A(2,3))。如果列表中不存在给定的元组,我们将元组附加到列表中。如果确实存在,则会引发用户定义的异常。当列表中不存在给定点时,该函数起作用。但是,如果该点确实存在并且它只是再次添加到列表的末尾,则不会引发异常。这是我到目前为止所拥有的: 类 ExistingPointError(异常): def init(自我,价值): self.value=0

class Polygon(object):
    counter = 0
    def __init__(self):
        Polygon.counter+=1
        self.points = []


# and here's the function that I'm working with

    def setter(self,pt):
        def isThere(pt):
               if pt in self.points: raise ExistingPointError()

            print("Setting Point")
        try:
            isThere(pt)
            self.points.append(pt)
        except ExistingPointError as E:
            print("Point exists! value: ", E)
        print(self.points)


P = Polygon()
point=collections.namedtuple('PointName','Name x y')
A = point(Name = 'A', x = 5, y = 0)
B = point(Name = 'B',x = 10,y = 5)
C = point(Name = 'C',x=5,y=10)
D = point(Name = 'D', x=-2,y=8)
lst = [A,B,C,D]
P.createPolygon(lst)
P.setter(D)

【问题讨论】:

  • 您应该发布 pt 的样子,即您如何定义命名元组。
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。具体来说,您还没有发布重现问题的代码。
  • isThere 中的 for 循环没有任何意义。

标签: python list class python-3.x tuples


【解决方案1】:

这个怎么样?

def setter(self,pt):
    def isThere(pt):
        if pt in self.points:
            raise ExistingPointError()
        print("Setting Point")
    try:
        isThere(pt)
        self.points.append(pt)
    except ExistingPointError as E:
        print("Point exists! value: ", E)
    print(self.points)

但我不相信例外是这里的方法。也许试试这个:

def setter(self,pt):
    if pt in self.points:
        print("Point exists!")
    else:
        self.points.append(pt)
    print(self.points)

【讨论】:

  • 看到事情是你的 for 循环没有意义,并且不需要例外。你确定分数是一样的吗? (命名元组不同于常规元组)
  • 是的,我在没有 for 循环的情况下尝试了它,我得到了相同的答案。所有点都命名为元组:L 这是一个实验室作业,所以问题说明我必须使用异常
【解决方案2】:

您想引发用户定义的错误 ExistingPointError(),但您还没有真正定义它是什么。当我运行您的代码并将重复的元组插入 Polygon 对象时,我收到以下错误:

Traceback (most recent call last):
File "python", line 27, in <module>
File "python", line 20, in setter
NameError: name 'ExistingPointError' is not defined

您可能不需要像@Gjhuizing 提到的那样为此提出异常。一条简单的消息告诉用户对象已经存在就足够了。

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2023-03-29
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多