2017-08-24 61 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))