2

こんにちは、簡単に解決できる問題だと思います。csv ファイルを読み取り、一部をリストに書き込もうとしています。各行のインデックスと値を決定し、集計する必要があります。

したがって、行には 32 個の値が含まれます...各値は、それに関連付けられた番号を持つ分類 (クラス 0、クラス 1 など) です。これを機能させるには、pythonic ソリューションが必要です。

import os,sys,csv
csvfile=sys.argv[1]
f=open(csvfile,'rt')
reader=csv.reader(f)
classes=[]
for row in reader:
  classes.append(row[60:92])
f.close()

classes = [' ', '1234', '645', '9897'],  [' ', '76541', ' ', '8888']

各リストからインデックス値を抽出してそれぞれの合計を取得するにはどうすればよいですか? 例: 0=(' ', ' ') 1=('1234', '76541') 2= ('645', ' ') 3= ('9897', '8888') 次に、それぞれの合計を見つけます

class 0 = 0
class 1 = 77775
class 2 = 645
class3 = 18785

どんな援助でも大歓迎です

4

3 に答える 3

1

あなたのユースケースは少し理解しにくいと思いますが、このリストの理解によって、問題を解決する方法について新しいアイデアが得られますか?

>>> classes = [' ', '1234', '645', '9897'],  [' ', '76541', ' ', '8888']
>>> [sum(int(n) for n in x if n != ' ') for x in zip(*classes)]
[0, 77775, 645, 18785]
于 2012-10-11T01:30:37.223 に答える
0

CSV ファイルの行をたどって合計することができます。(たとえば、rows ループ内に for class_ ループを配置します) ..:

>>> classes
[[' ', '1234', '645', '9897'], [' ', '76541', ' ', '8888']]
>>> sums = {}
>>> for row in classes:
...     for class_, num in enumerate(row):
...         try:
...             num = int(num)
...         except ValueError:
...             num = 0
...         sums[class_] = sums.get(class_, 0) + num
...
>>> sums
{0: 0, 1: 77775, 2: 645, 3: 18785}
于 2012-10-11T04:38:51.727 に答える
0
>>> classes = [[' ', '1234', '645', '9897'],  [' ', '76541', ' ', '8888']]
>>> my_int = lambda s: int(s) if s.isdigit() else 0
>>> class_groups = dict(zip(range(32), zip(*classes)))
>>> class_groups[1]
('1234', '76541')
>>> class_sums = {}
>>> for class_ in class_groups:
...     group_sum = sum(map(my_int, class_groups[class_]))
...     class_sums[class_] = group_sum
...
>>> class_sums[1]
77775
>>> class_sums[3]
18785
>>>
于 2012-10-11T04:31:35.573 に答える