2

スクリプト言語は初めてです。次の番号を持つExcel(xls、2003)ファイルがあります

2      48
3      49
6      57
11     89
19     120
29     110
32     105

私は次のことをしようとしています

  1. Excelファイルを読む:私がしたこと
  2. 列 2 の 2 つの連続した数字の正と負の違いを見つけます。
  3. ステップ 2 で定義された列 2 で正または負の意味で差が最大になる場合に、列 1 で対応する数値を見つけます。

Excelファイルを読み取るために次のスクリプトを実行しましたが、続行する方法がわかりません

import xlrd

myexcel = xlrd.open_workbook('sample.xls')
#print "WorkSheets:", myexcel.sheet_by_names()
sheet = myexcel.sheet_by_index(0)

c = sheet.col_values(1)
print c

#data = [] #make a data store

次の印刷物を期待しています

最大正の差:11

最大負の差:29

4

3 に答える 3

1

どうぞ:

col1 = [2, 3, 6, 11, 19, 29, 32]
col2 = [48, 49, 57, 89, 120, 110, 105]

pd, nd, pi, ni = 0, 0, -1, -1
for i in range(len(col2)-1):
    d = col2[i+1] - col2[i]
    if d > 0 and d > pd:
        pd, pi = d, i
    if d < 0 and abs(d) > nd:
        nd, ni = abs(d), i

print "Max positive difference :" + str(col1[pi+1])
print "Max negative difference :" + str(col1[ni+1])

出力:

>>> 
Max positive difference :11
Max negative difference :29

更新:ショートバージョン

col1 = [2, 3, 6, 11, 19, 29, 32]
col2 = [48, 49, 57, 89, 120, 110, 105]

m = [(x[1] - x[0]) for x in zip(col2[:1] + col2, col2 + col2[-1:])]

print "Max positive difference :" + str(col1[m.index(max(m))])
print "Max negative difference :" + str(col1[m.index(min(m))])
于 2013-03-03T19:58:00.803 に答える
0

ローカル変数、ループ、条件を過度に使用せずにこれを試すことができます。

#! /usr/bin/python

col1 = [2, 3, 6, 11, 19, 29, 32]
col2 = [48, 49, 57, 89, 120, 110, 105]

difs = [ (a, c - b) for a, b, c in zip (col1 [1:], col2, col2 [1:] ) ]
print (max (difs, key = lambda x: x [1] ) [0] )
print (max (difs, key = lambda x: -x [1] ) [0] )
于 2013-03-03T20:28:24.670 に答える
0

これはあなたが探しているもののようなものだと思います

(max_pos_difference, max_pos_row_col_1_value, neg_row_col_1_value, max_neg_row_col_1_value) = get_max_row()

print "Pos val: {} Pos row: {} Neg val: {} Neg row: {}".format(max_pos_difference, max_pos_row_col_1_value, neg_row_col_1_value, max_neg_row_col_1_value)

def get_max_row():
    max_pos_difference = 0
    max_neg_difference = 0
    max_pos_row = 0
    max_neg_row = 0
    for rownum in range(sheet.nrows):
        if rownum <= sheet.nrows - 1:
            this_row_value = sheet.cell(rownum, 1).value
            next_row_value = sheet.cell(rownum+1, 1).value
            difference = next_row_value - this_row_value

        if difference > max_pos_difference and difference >= 0:
            max_pos_difference = difference
            max_pos_row = rownum

        if difference < max_neg_difference and difference < 0:
            max_neg_difference = difference
            max_neg_row = rownum

    return (max_pos_difference, sheet.cell(max_pos_row, 0).value, max_neg_difference, sheet.cell(max_neg_row, 0).value
于 2013-03-03T20:08:48.613 に答える