2016-08-07 26 views
0

現在、Pythonに慣れようとしていますが、列を読み込み、文字列の繰り返し要素を数えようとしています。私がこれまで持って何CSV列の繰り返し要素数をカウントする

i = 0 
y = [i] 
fav_Split = row[9].split('|') 
#print fav_Split 

for x in fav_Split: 
    #print x 
    y[i] = x 
    i = i+1 

print fav_Splitは私を与える:

['XA', 'MA'] 
['BA', 'MA', 'RA'] 
['EB', 'CB'] 
['JA', 'RB', 'RA'] 
['ED', 'EA', 'RB', 'KA', 'RA'] 
['SB'] 
['MA', 'ED', 'SB'] 
['EC'] 
['FA'] 
['RA', 'MA'] 
['RB'] 
['CB'] 
['AC'] 
['CB', 'MA', 'RA'] 
['AC'] 
['KA'] 
['SA', 'CB'] 
['BA', 'ED', 'MA'] 
['KA', 'ED', 'SA'] 
['AB'] 
['CA'] 
['AB'] 
['SB', 'MA'] 
['XA', 'BA', 'CA'] 
['SA', 'AB'] 
['SA', 'XA', 'CA'] 
['KA'] 
['MA', 'XA'] 
['MA'] 
['RA', 'EC', 'JA'] 
['RA'] 
['CC', 'RA'] 
['CC'] 
['CC', 'RA'] 
['SA', 'RA'] 
['RA', 'AC'] 
['XA', 'JA', 'RA'] 
['CB', 'KA', 'RA'] 
['ZZ'] 
['CB', 'SA', 'RA'] 
['MA'] 
['LA', 'RB', 'RA'] 
['XA', 'RA'] 
['GA', 'RA', 'LA'] 

print xは私を与える:私が欲しいものである

XA 
MA 
BA 
MA 
RA 
EB 
CB 
JA 
RB 
RA 
ED 
EA 
RB 
KA 
RA 
SB 
MA 
ED 
SB 
EC 
FA 
RA 
MA 
RB 
CB 
AC 
CB 
MA 
RA 
AC 
KA 
SA 
CB 
BA 
ED 
MA 
KA 
ED 
SA 
AB 
CA 
AB 
SB 
MA 
XA 
BA 
CA 
SA 
AB 
SA 
XA 
CA 
KA 
MA 
XA 
MA 
RA 
EC 
JA 
RA 
CC 
RA 
CC 
CC 
RA 
SA 
RA 
RA 
AC 
XA 
JA 
RA 
CB 
KA 
RA 
ZZ 
CB 
SA 
RA 
MA 
LA 
RB 
RA 
XA 
RA 
GA 
RA 
LA 

。私はこれらの別々のバールを配列に読み込み、それを後で数えようとしています。しかし、y配列を読み込もうとしたときにエラーが発生する

y[i] = x 
    IndexError: list assignment index out of range 

誰か助けてもらえますか?私の次のステップは、繰り返し要素を数え、トップX(ユーザー入力に基づいて変更可能)を表示することです。

更新日2: デバッグ画像: ここで私は理解できません:yは...そうではありません... xを独自の要素として見ていますか? UPDATE 3 enter image description here

:yの + = X enter image description here

+0

私はこの質問がCSV(またはExcel)とは何の関係もないと確信しています。文字列を数えることは、それらの文字列の出所とは関係がありません。 –

+0

元々CVSファイルのデータですが、スクリプト全体がCSVから読み込み、新しいCSVに書き込んだり、さらにVBAマクロを呼び出してCSVデータをさらに変更したり、CSVファイルの名前をタイムスタンプで変更したりしています。 。私はそれ以上のものを指定しなければなりません:P - 必要でない場合、タグを削除します。 –

+0

1.(再) "ask"を読んでください---画像はコードの代わりではありません。たとえ画像リンクが存続しても、それは[mcve]に変えることはできません。また、イメージは、あなたが間違っていると思っていることを私たちに伝えることはできません。彼らはPythonがそれを行うように言ったときにPythonが何をしているかを表示します(これは私の本でうまくいきます)。 –

答えて

1

まず、私はあなたの元のコードにあなたの改善を与えてみましょう:

y = [] 
fav_Split = row[9].split('|') 
#print fav_Split 

for x in fav_Split: 
    y += x 

あるいは、さらに短い:

fav_split = row[9].split('|') 
y = [item for sublist in fav_Split for item in sublist] 

これで、2文字コードのリストが完成しました。次のステップは、あなたが必要とするものと正確に思われるcollections.Counterクラスを使用しています。あなたはそれにリストを渡し、各要素の出現を計算し、出現順に降順に並べ替えます。

import collections.Counter 
c = collections.Counter(y) 

はあなたのリストから n最も一般的な要素は、あなたが簡単に使用することができます取得するには most_common()

c.most_common(n) 

れます

戻り、nのリストで最も一般的な要素とその数最も一般的なものから最も少ないものへ

+0

ありがとう!私はこれで今、上になるでしょう –

+0

幸運!それが動作しない場合は、私に教えてください。 – Carsten

+0

ああ、私はこれを早く試したことを覚えています! 私は収集機能について知りませんでした。カウンター({'MA':1、 'BA':1、 'RA':1}) カウンター({'XA':1、 'MA':1}カウンター({'ED':1、 'KA':{'CB':1、 'EB':1}) カウンター({'JA':1、 'RB':1、 'RA' 1、 'RA':1、 'RB':1}) カウンタ({'SB':1}) カウンタ({'ED':1、 'MA':1、 '、この場合、個別の配列をこのリストの別の要素として追加しているようです。 –