gpt4 book ai didi

python - 无法将列表作为类属性传递

转载 作者:行者123 更新时间:2023-11-30 22:50:23 24 4
gpt4 key购买 nike

我创建了一个迭代器。我正在尝试迭代食谱成分,以检查素食者是否可以做到。

class Vegan:

NONE_VEGAN_INGREDIENT = ['egg', 'milk', 'honey', 'butter']

def __init__(self, *args):
self.ingredient_list = (args)
self.index = -1

def __iter__(self):
return self

def __next__(self):
if self.index == len(self.ingredient_list):
raise StopIteration
for ingredient in self.ingredient_list:
if ingredient in Vegan.NONE_VEGAN_INGREDIENT:
self.index += 1
return ('{} is a vegan ingredient'.format(ingredient[self.index]))
else:
self.index += 1
return ('{} is NOT a vegan ingredient'.format(ingredient[self.index]))

iterable = Vegan('tomato', 'banana', 'asd', 'egg', 'tomato')
iterator = iter(iterable)
while True:
try:
print(next(iterator))
except StopIteration:
break

如您所见,我传递了 *args,它应该是一个列表,但每当我尝试运行它时,它都会迭代第一个单词,并检查单词“tomato”的字母。我希望我的迭代器能够遍历成分,如果 NONE_VEGAN_INGREDIENT 列表中没有某些内容,则按代码中的样子进行打印。如何传入列表?

最佳答案

您的问题是因为您正在索引成分而不是元组,ingredient[self.index] 应该是 self.ingredient_list[self.index]

您可以简化您的代码,使其表现得像您的代码,但可以通过使args 可迭代来工作,这样您就可以按原样传递字符串,而无需将它们放入列表等中..:

class Vegan:
NONE_VEGAN_INGREDIENT = ['egg', 'milk', 'honey', 'butter']

def __init__(self, *args):
self.ingredient_iter = iter(args)
def __iter__(self):
return self

def __next__(self):
ingredient = next(self.ingredient_iter)
if ingredient in Vegan.NONE_VEGAN_INGREDIENT:
return '{} is a vegan ingredient'.format(ingredient)
return '{} is NOT a vegan ingredient'.format(ingredient)


iterable = Vegan('tomato', 'banana', 'asd', 'egg', 'tomato')

for ele in iterable:
print(ele)

输出:

In [2]: iterable = Vegan('tomato', 'banana', 'asd', 'egg', 'tomato')

In [3]: for ele in iterable:
...: print(ele)
...:
tomato is NOT a vegan ingredient
banana is NOT a vegan ingredient
asd is NOT a vegan ingredient
egg is a vegan ingredient
tomato is NOT a vegan ingredient

您在自己的代码中引发 Stopiteration,但调用 next(iterable) 也会执行相同的操作,因此,使对象可迭代的要点是您可以直接迭代它,因此无需尝试/除了。另外我传递的args应该是一个列表是不正确的,args是一个元组。

此外,如果您有很多成分需要检查,那么制作NONE_VEGAN_INGREDIENT一套会更有效:

NONE_VEGAN_INGREDIENT = {'egg', 'milk', 'honey', 'butter'}

关于python - 无法将列表作为类属性传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39390157/

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