gpt4 book ai didi

python - 扩展 python 列表以在追加之前检查输入

转载 作者:行者123 更新时间:2023-11-28 17:46:31 25 4
gpt4 key购买 nike

我有一种情况,我将有很多列表,每个列表中的值都需要在一些有效值集中。但是,每个列表的有效值集将有所不同。因此,在对这些列表进行任何附加操作之前,我必须检查成员资格,这会产生大量重复代码。我发现自己很想扩展列表对象,这样我就不必一遍又一遍地进行成员资格检查。

class Attribute(list):
def __init__(self,validList):
self.valid = validList

def append(self,inString):
if inString not in self.valid:
raise Exception, '%s is not a valid value for this attribute' % inString
if inString not in self:
super(Attribute,self).append(inString)

这样我就可以让每个列表都具有不同的有效值集。但是,我觉得扩展内置对象通常不是一个好主意,我过去一直避免这样做。所以我的问题是

  1. 是否有内置方法可以做到这一点,或者是否有图书馆已经拥有类似的东西?
  2. 这是个坏主意吗?这样做可能会出现什么问题?

Overriding append method after inheriting from a Python List有助于使此代码正常工作。

最佳答案

我想你可以采用任何一种方式,但通常我会避免子类化列表。例如,我可能会创建自己的集合对象而不是子类化。

在您的情况下,我会过滤每个列表以检查成员资格。除非您要处理庞大的记录集,否则这可能不是问题。

list.append(1)
list.append(2)
list.append(3)
# list = [1, 2, 3]

valid_values = (2, 3)

list = [item for item in list if item in valid_values]
# list = [2, 3] now

至于为什么 append 不起作用的问题,那是因为您试图附加一个列表,而不是一个列表项。您可以通过将其设为 list.append(inString) 来解决此问题。如果在某些时候您想实际将列表组合在一起,您可以使用 list.extend(other_list)list + other_list

附带说明一下,大多数 Python 人都遵循 PEP-8 语法以提高可读性。这意味着 inString 将被命名为 in_string

关于python - 扩展 python 列表以在追加之前检查输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17453264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com