gpt4 book ai didi

Python:迭代一组符号

转载 作者:行者123 更新时间:2023-12-01 03:59:22 26 4
gpt4 key购买 nike

我经常发现自己处于这样的情况:我想要迭代一组逻辑上相连的符号。显而易见的解决方案是将这些符号添加到列表中,但重复维护起来很痛苦,我必须相信,如果我的开发人员同事更改了其中一个,他们也会更改另一个。

有没有一种方法可以创建符号,同时将它们的值添加到列表中?

例如

# A group of like symbols that can be used independently in this scope
hippo = 'hippo'
gator = 'gator'
mouse = 'mouse'

# To loop across them I have to put them into a list
valid_animals = [hippo, gator, mouse] # Maintain me separately, fool!

我想要的伪代码

# Data structure that declares symbols whose values can be iterated over
valid_animals = { # Even your mom could maintain this
hippo = 'hippo'
gator = 'gator'
mouse = 'mouse'
}

# Use the symbols by themselves
print "I had a", mouse, "in my house"

# Iterate over the symbols
print mouse in valid_animals # True

最佳答案

这听起来像是面向对象编程的用途:

class Animal(object):
list = []
def __init__(self,name):
self.name = name
Animal.list.append(self.name)


mouse = Animal("mouse")
cat = Animal("cat")

print(mouse) # <test.Animal object at 0x7f835e146860>
print(mouse.name) # 'mouse'
print(cat.name) # 'cat'
print(Animal.list) # ['mouse', 'cat']

通常,在 Python 中,类具有 init 方法。这看起来很神秘,但它实际上只是在基于类实例化对象时调用的一些代码。 (将类视为创建对象的模板,init 方法在创建对象时运行。)

在类中,创建一个空列表。这是一个类级列表,可以在代码中使用 Animal.list 进行访问。它不与任何特定的实例化对象(即猫或老鼠)连接。

当调用init方法时,新创建的对象的名称将添加到类级列表中。因此,如果您创建十个动物(Animal('ocelot')、Animal('kangaroo') 等),您可以调用 Animal.list 来查看所有动物的名称。

编辑:您请求对您的问题提供更通用的解决方案:

class Symbol(object):
types = []
def __init__(self,name):
self.name = name
Symbol.types.append(self.name)
self.item_list = []


def add(self,item):
self.item_list.append(item)


animal = Symbol('animal')

print(animal.item_list) # []

animal.add('tiger')
animal.add('llama')

print(animal.item_list) # ['tiger', 'llama']

food = Symbol('food')

food.add('carrot')
food.add('beans')

print(food.item_list) # ['carrot', 'beans']

print(Symbol.types) # ['animal', 'food']

关于Python:迭代一组符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36874630/

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