2

私はプログラミングを始めたばかりで、まだいくつかの基本が欠けていることを知っていますが、これを解決しようとしています. テキスト ファイルから取り込んだ 3 桁と 4 桁の数字のリストがあり、これらの数字の合計を取得しようとしています。これまでのところ、Python にできることは、個々の数値の合計を実行することだけなので、リストの最初の数値が 427 の場合、427 + 504 + 219 などを追加するのではなく、13 を出力します。

これは私が持っているものです:

myList = []
inFile = open('E:/GIS/GTECH 731/NYCElementarySchools.txt', 'r')
for row in inFile:
    col = row.split('\t')
    if col[1]=='BK':
        myList = (col[3])
        intList = [int(x) for x in myList]
        print sum(intList)

さらに、長さを印刷すると、3 と 4 のリストが表示され、各数値の長さが示され、数値の合計数は示されません。

何か基本的なことが欠けているに違いないのですが、それが何かわかりません! どんな提案でも大歓迎です!ありがとう!

4

3 に答える 3

1

あなたのコードで:

col = row.split('\t')
if col[1]=='BK':
    myList = (col[3])
    intList = [int(x) for x in myList]
    print sum(intList)

'col = row.split('\t')' は、TAB で区切られたリストを作成します。

ファイルから読み取られた行が次のようになっている場合:

# \t is TAB
SOMETHING\tBK\t1\t2\t3

col 構造は次のとおりです。

col[0] = SOMETHING
col[1] = BK
col[2] = 1
col[3] = 2
col[4] = 3

したがって、col[3] を col[...] に合計する場合は、col[3:] = col[3] のリスト、col[4] を使用します。

したがって、合計結果を累積したい場合は、別の変数が必要です。

myList = []
inFile = open('E:/GIS/GTECH 731/NYCElementarySchools.txt', 'r')
sumList = []
for row in inFile:
    row_total = 0
    col = row.split('\t')
    if col[1]=='BK':
        intList = [int(x) for x in col[3:]]
        row_sum = sum(intList)
        # row_sum = map(lambda x: int(x), col[3:])
        print 'row total: %d' % (row_sum)
        sumList.append(row_sum)

print 'total: %d' % (sum(sumList))
于 2013-09-28T14:48:40.683 に答える
1

これ:

myList = (col[3])

数値の表現であるではなくに設定さmyListれます。したがって:strlist

intList = [int(x) for x in myList]

数字を数字に変換します。int(myList)文字列全体を数値に変換したい。


現在の合計 (0 に初期化) を保持し、total += int(myList)すべての数値を合計することができます。その後、ループのprintに結果が得られます。

于 2013-09-28T13:02:56.160 に答える
0

おそらく、スライスを使用して myList を割り当てたいと思うでしょう

myList = col[3:]

これにより、3 列目以降のすべてのリストが返されます。

于 2013-09-28T13:33:36.730 に答える