前提・実現したいこと
二週間ほど前からpythonの勉強を独学でしています。
現在、投票制度のプログラムをつくろうとしています。二次元配列の任意の値と一致する列の要素を削除しようとしているところでエラーがでてしまいます。
今回は二次元配列の一番目の列から最小投票数の立候補者'2'(最小が二名以上いる場合はだれでもいい)を削除し、削除した列はつめる。そして、また一番目の列をカウントする(まだ繰りかえしはできていない)を行いたいと考えています。
発生している問題・エラーメッセージ
[['A' '3' '2' '1' '4' '5'] ['B' '4' '3' '2' '1' '5'] ['C' '5' '3' '4' '2' '1'] ['D' '4' '3' '2' '1' '5'] ['E' '3' '2' '1' '4' '5'] ['F' '1' '3' '4' '5' '2'] ['G' '1' '3' '4' '2' '5'] ['H' '4' '3' '2' '5' '1'] ['I' '2' '3' '4' '1' '5'] ['J' '2' '1' '4' '3' '5'] ['K' '5' '3' '2' '1' '4']] 立候補者数は5人です。 過半数:3 もう一度ソートしなおします。 2 最小投票数の立候補者:2 Traceback (most recent call last): File "election.py", line 62, in <module> election_sort(data2) File "election.py", line 53, in election_sort data4.remove(min_cand) AttributeError: 'numpy.ndarray' object has no attribute 'remove'
該当のソースコード
def file_open(file): import sys data = [] try: f = open(file, 'r', encoding='utf-8') except Exception:#ファイルの拡張子の違い、ファイル名の間違い print('OPEN ERROR>>ファイルが見つからないorファイル拡張子の違い:', str(file)) sys.exit(1) for line in f: line = line.strip() #前後空白削除 line = line.replace('\n','') #末尾の\nの削除 line = line.split(",") #分割 data.append(line) f.close() return data def election_sort(data2): import numpy as np import collections import math #import os.remove as rm data4 = np.array(data2) print(data4) line1_array = data4[0,:]#一行目を抽出する file1_array = data4[:,1]#投票者の第一位を抽出する #print(line1_array) #print(file1_array) cand = len(line1_array) -1#立候補者 print('立候補者数は{0}人です。'.format(cand)) half_cand = math.ceil(cand/2)#過半数 print('過半数:{0}'.format(half_cand)) count_array = collections.Counter(file1_array)#立候補者の投票数をカウント top = count_array.most_common()[0][1]#最も多い立候補者 #who_top = count_array.most_common()[0] #print(who_top) low = count_array.most_common()[-1][1]#最も少ない立候補者 #print(count_array) #print(type(count_array)) #print(issubclass(type(count_array), dict)) #print(top) #print(low) if top > half_cand:#topが過半数を超えているか比較する print('当選者は{0}です!'.format(top)) return True else: print('もう一度ソートしなおします。') min_cand = count_array.most_common()[-1][0] print(min_cand) print('最小投票数の立候補者:{0}'.format(min_cand)) //以下の2行を加えたらエラーが発生しました。 data4.remove(min_cand) print(data4) if __name__ == '__main__': data2 = file_open('test2.csv')#csvを引数にfiel_opne関数を呼び出す #print(data2) election_sort(data2)
試したこと
...
else:
print('もう一度ソートしなおします。')
min_cand = count_array.most_common()[-1][0]
del_cand = [min_cand]//文字の配列にしてみた、1文字しかないけど
print(min_cand)
print('最小投票数の立候補者:{0}'.format(min_cand))
data4.remove(del_cand) print(data4)
補足情報(FW/ツールのバージョンなど)
windows 10
python 3.6.5
numpy 1.14.3+mkl
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/07 03:28