在python中运行时变量访问

时间:2014-08-18 05:48:17

标签: python declaration

我是python的新手。在这里,我测试的是变量wordlist已在循环中使用的示例。

在使用之前是否需要手动声明?或者它会被声明为运行时?

我甚至试过手动声明但是它仍然是空的。

我正在关注此示例:http://www.sjwhitworth.com/sentiment-analysis-in-python-using-nltk/

如果我直接使用它:

wordlist = [i for i in wordlist if not i in stopwords.words('english')]
wordlist = [i for i in wordlist if not i in customstopwords]

它给出错误:

wordlist = [i for i in wordlist if not i in stopwords.words('english')]
NameError: name 'wordlist' is not defined

我像这样手动宣布wordlist

wordlist = []

但在这种情况下它仍然是空的:

wordlist = []
wordlist = [i for i in wordlist if not i in stopwords.words('english')]
wordlist = [i for i in wordlist if not i in customstopwords]

print wordlist

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

你的第一个清单理解:

wordlist = [i for i in wordlist if not i in stopwords.words('english')]

大致相当于:

tmp_lst = []
for i in wordlist:
    if i not in stopwords.words('english'):
        tmp_lst.append(i)
wordlist = tmp_lst

当你以这种方式阅读时,很明显wordlist必须是之前可以迭代的东西。当然, {/ em> wordslist应由您自己决定并且完全依赖于您正在努力实现的目标......

答案 1 :(得分:1)

以下是列表推导在python中的工作原理。假设您有一个列表x,如

x=[1,2,3,4]

并且您想使用列表理解来增加其值:

y=[element+1 for element in x]
#   ^               ^       ^
#element         element    list on which
#to be added                operations are
#in list of y               performed

输出:

y=[2,3,4,5]

在您的情况下,x(即,wordlist)为空,因此for循环不会迭代。根据上述link的说明,wordlist应该是一系列艺术家名称。

wordlist = ["Justin Timberlake", "Tay Zonday", "Rebecca Black"]