Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查类的一部分是否是列表的一部分_Python_Python 3.x - Fatal编程技术网

Python 如何检查类的一部分是否是列表的一部分

Python 如何检查类的一部分是否是列表的一部分,python,python-3.x,Python,Python 3.x,我有一个类,它由一个先前确定的列表中的随机行填充。该列表由CSV文件填充。该类如下所示: class Gem: def __init__ (self, name, value): self.name = name self.value = float(value) 使用类正确填充列表和项目。我有6个列表,我需要检查item.name是否是其中的一部分。我想: if item.name in COMMONGEMS: item.value = ran

我有一个类,它由一个先前确定的列表中的随机行填充。该列表由CSV文件填充。该类如下所示:

class Gem:
    def __init__ (self, name, value):
        self.name = name
        self.value = float(value)
使用类正确填充列表和项目。我有6个列表,我需要检查item.name是否是其中的一部分。我想:

if item.name in COMMONGEMS:
    item.value = random.range(4, 17)
我对每个列表都这样做,但虽然我没有得到任何错误,但在应该得到匹配的时候,这永远不会得到匹配

我应该如何做到这一点呢

编辑:为了响应interjey,一旦从CSV加载,列表将如下所示:

print (COMMONGEMS)
[['Banded', '0'], ['Eye Agate', '0'], ['Moss Agate', '0'], ['Azurite', '0'], ['Blue quartz', '0'], ['Hematite', '0'], ['Lapis Lazuli', '0'], ['Malachite', '0'], ['Obsidian', '0'], ['Rhodochrosite', '0'], ['Tiger Eye', '0'], ['Turquoise', '0'], ['Freshwater', '0'], ['Irregular Pearl', '0']]

如果item.name是类似“Banded”的字符串,则在COMMONGEMS中找不到item.name

['Banded',0']在COMMONGEMS=>true

COMMONGEMS中的“带状”=>false

编辑: 您可以使用字典代替列表:

COMMONGEMS = {'Banded': '0' , 'Azurite' : '0'}

if item.name in COMMONGEMS:
    item.value = random.range(4, 17)

如果item.name是类似“Banded”的字符串,则在COMMONGEMS中找不到item.name

['Banded',0']在COMMONGEMS=>true

COMMONGEMS中的“带状”=>false

编辑: 您可以使用字典代替列表:

COMMONGEMS = {'Banded': '0' , 'Azurite' : '0'}

if item.name in COMMONGEMS:
    item.value = random.range(4, 17)

您当前的代码未检查列表列表中的名称。它只是检查内部列表本身,它与您的查询不匹配。 一个简单的循环可以在名称处查看内部列表:

for element in COMMONGEMS:
    if item.name == element[0]:
        item.value = random.range(4, 17)

我在中使用了
=
而不是
,因为可能有一个gem在
另一个名称中有一个名称
,但不是该名称。例如
ruby
匹配
starruby
等。

您当前的代码没有检查列表列表中的名称。它只是检查内部列表本身,它与您的查询不匹配。 一个简单的循环可以在名称处查看内部列表:

for element in COMMONGEMS:
    if item.name == element[0]:
        item.value = random.range(4, 17)


我在
中使用了
=
而不是
,因为可能有一个gem在
另一个名称中有一个名称
,但不是该名称。例如
ruby
匹配
starruby
等。

是名称列表还是
Gem
实例列表?你能举个例子吗?@interjay我已经编辑了这个问题并回答了你。谢谢你的帮助!它是一个名称列表还是一个
Gem
实例列表?你能举个例子吗?@interjay我已经编辑了这个问题并回答了你。谢谢你的帮助!虽然这是真的,但它并没有回答问题。+1对于字典,您可以进一步使用
csv.DictReader
。这是一个好主意,但我可能会在某个时候向gems类添加一个描述,我认为字典不适用于此。不过,谢谢你,我以后会记住这一点。虽然这是事实,但它并不能回答问题。+1对于字典,你可以更进一步,也可以使用
csv.DictReader
。这是一个好主意,但我可能会在某个时候向gems类添加一个描述,我认为字典不适合这样做。不过谢谢,我以后会记住这一点。
是检查身份,而不是平等。使用
=
。最好使用我认为
如果有的话(item.name==e[0]表示COMMONGEMS中的e):
我讨论过使用
any
,但他可能需要元素本身作为值,所以我保留了原样<代码>任何
都很棒。也许下一步(itertools.dropwhile(lambda e:item.name!=e[0],COMMONGEMS),没有)
使用==似乎很有效,或者至少我比以前更进一步了。我得到了另一个错误:item.value=random.range(2,9)AttributeError:“module”对象没有属性“range”,这是谎言,我不知道它为什么会带着这个返回。我相信这是无关的,所以我将打开另一个问题。感谢您的帮助。
is
检查身份,而不是平等。使用
=
。最好使用我认为
如果有的话(item.name==e[0]表示COMMONGEMS中的e):
我讨论过使用
any
,但他可能需要元素本身作为值,所以我保留了原样<代码>任何都很棒。也许下一步(itertools.dropwhile(lambda e:item.name!=e[0],COMMONGEMS),没有)使用==似乎很有效,或者至少我比以前更进一步了。我得到了另一个错误:item.value=random.range(2,9)AttributeError:“module”对象没有属性“range”,这是谎言,我不知道它为什么会带着这个返回。我相信这是无关的,所以我将打开另一个问题。谢谢你的帮助。