2016-08-11 17 views
-4

以下のコードでは、len(list)を使用して、whileループの各タグ変数の配列内の文字列の数を数えようとしています。下のリストlist2のサンプルリストパラメータを実行したときに5が表示されましたが、実際のデータでは、文字列の数ではなく配列の文字がカウントされていました。私はそれがなぜであるかを理解するのに役立つ必要があります。そして、私はPythonには新しいので、可能な限り簡単な方法です!Python len not working

#!/usr/bin/python 

import json 
import csv 
from pprint import pprint 

with open('data.json') as data_file:  
data = json.load(data_file) 

#pprint(data) 

# calc number of alert records in json file 
x = len(data['alerts']) 
count = 0 
while (count < x): 
    tags = str(data['alerts'][count] ['tags']).replace("u\"","\"").replace("u\'","\'") 
    list = "[" + tags.strip('[]') + "]" 
    print list 
    print len(list) 
    count=count+1 

list2 = ['redi', 'asd', 'rrr', 'www', 'qqq'] 
print len(list2) 
+2

[mcve]をお願いします。 – Julien

答えて

4

あなたのリスト構築list = "[" + tags.strip('[]') + "]"stringないlistを作成します。そう、はい、lenが動作し、あなたの文字列の文字を数えます。

あなたのタグの構成はちょっと見えますが、データの辞書(data['alerts'])が文字列に変換され、 '[]'という文字列があります。なぜ値そのものを使うのではないのですか?

また、listはあなたの変数にとって恐ろしい名前です。この可能性は、内部値と衝突します。

+0

また、変数 'list'を呼び出すことは非常に悪い考えです。 – Keozon

1
list = "[" + tags.strip('[]') + "]" 
print list 
print len(list) 

皮肉なことに、listは文字列であり、リストではありません。それはそれことを示していた場合

print(type(yourList)) 

:、あなたはあなたの変数がリストではなく、STRであることを確認する必要がある「配列中の文字を数えた」

0

試してその上にlenを呼ぶ理由です

len(list[yourList) 

希望はこれがあなたの質問

に答え、あなたがリスト変数を確立したいとき、試してみてください。strがあり、これを試してみてくださいこれは:

これらは間違いなくあなたの問題を解決したと思いますので、この部分に気付きましたら幸いです。