如何判断未定义的变量是否在Python列表中?

时间:2013-04-15 02:56:23

标签: python

此代码给了我一个错误,如何检查变量是否在列表中?

TomMarks = [66,54,34,79]
JackMarks = [66,54,34,79]
myList = [TomMarks, JackMarks]

if KateMarks in myList:
    print("yes")
else:
    print("no")

7 个答案:

答案 0 :(得分:3)

Python无法检查列表中是否存在某些内容,如果它不知道某些内容是什么。 (通常,如果您尝试引用尚未定义的变量,则会出现错误。)

在您的示例中,即使您定义myList = [TomMarks, JackMarks],如果您打印列表,也会得到:

[[66, 54, 34, 79], [66, 54, 34, 79]]

如果事先定义KateMarks,那么代码将完美运行。但是如果变量未定义,Python将不知道要检查什么。

答案 1 :(得分:3)

您需要在使用之前定义变量。你在告诉编译器" KateMarks"并且它不知道它是什么 - 你怎么想它会发生什么?

这:

TomMarks = [66,54,34,79]
JackMarks = [66,54,34,79]
myList = [TomMarks, JackMarks]

KateMarks = 1

if KateMarks in myList:
    print("yes")
else:
    print("no")

工作正常并打印" no"。

您可能想要的是先检查变量是否存在:

if 'KateMarks' in locals():

答案 2 :(得分:1)

如果您确实要打印no即使未定义KateMarks,也可以执行以下操作,但这不是一个很好的方法。

TomMarks = [66,54,34,79]
JackMarks = [66,54,34,79]
myList = [TomMarks, JackMarks]

try:
    if KateMarks in myList:
        print 'yes'
    else:
        print 'no'
except(NameError):
    print 'no'

答案 3 :(得分:1)

Python变量名称是对象的引用。因为KateMarks没有引用任何东西,所以Python会引发NameError异常。

可以使用locals()dir()

实现命名空间内省
'KateMarks' in dir()

答案 4 :(得分:1)

而不是列表,您可以通过词典来完成,例如:

myList = {'TomMarks':[66,54,34,79], 'JackMarks':[66,54,34,79]}

if 'KateMarks' in myList:
    print("yes")
else:
    print("no")

答案 5 :(得分:0)

你的意思是你在编写某种代码,你会在程序的其他地方获得Kate的标记,然后检查标记是否在其中?

或者实际上,在第二个想法中我认为整个列表中的列表和标记的想法只是一个分心...你真的想问你是否可以使用类似于字符串的变量名称,对?如果是这种情况,那么使用dict进行我认为你正在做的事情的方式有点不那么有效:

marks = {} # a Python dictionary
marks["Tom"] = 1234123412512352345
marks["Jack"] = 2394872394857389578935

if "Kate" in marks:
    print("Kate is a key in marks.")
else:
    print("Kate isn't a key, but at least now we know that we didn't get Kate's marks.")

答案 6 :(得分:0)

如果变量未定义,您只需检查它是否未定义。任何列表中都没有未定义的变量:

if not 'undefined_variable' in dir():
   print "NO WAY!"