2017-08-24 63 views
0

有9个文本称为text1,text2,... text9。函数定义如下。动态访问python中的变量

def lexical_diversity(text): 
    return len(set(text))/len(text) 

我想用下面的代码调用所有9个文本的函数。但输出是错误的。

for i in range(1,10): 
    a='text'+str(i) 
    print(lexical_diversity(a)) 

我的输出

0.8 
0.8 
... 
0.8 

如果应用功能的te​​xt1,我得到下面的结果。

>>>lexical_diversity(text1) 
    Out[37]:0.07406285585022564 

那么哪个部分出问题了?

+1

是什么text1中包含哪些内容? –

+1

''text'+ str(i)'给出''text1“','”text2“',...实际的字符串。所以你得到''text1“'',''text2”'的词汇多样性......如果你想要访问多个文本,你可能想要将它们存储在一个数组中,而不是单独的变量,否则你不能循环在他们。 – spectras

+0

@spectras我看到我的错误。谢谢。无论如何要解决它? –

回答

3

您应该明白a = 'text' + str(i)不会神奇地赋予a变量text1中包含的任何值。相反,a被分配给字符串"text1"。这两个是不是一样。

鉴于名字,你或许应该考虑在list存储您text S:

texts = [text1, text2, text3, ...] 

而现在,

for a in texts: 
    print(lexical_diversity(a)) 
+0

给定名字我会提倡一个数组。 'texts [i]'听起来比'texts“+ str(i)]更好。 – spectras

+0

我的意思是给出他的变量名,我相信他的'text1','text2',......中没有语义内容,他只有文本,并且在他的变量名称中添加了一个数字。 – spectras

+0

@spectras是的,你是对的。 –

0

Python3

def lexical_diversity(text): 
    return len(set(text))/len(text) 
lista = [] 
for i in range(1,10): 
    lista.append("text%d" % i) 
for resVal in lista: 
    print(resVal) 
    print(lexical_diversity(resVal))