在Python中使用类初始化对数据表中的条目进行累积式计算

2024-10-04 01:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Python确定数据表中Z的最佳值。当Y值的差值大于10时,Z的最佳值出现。在我的代码中,我将每个条目的元素分配到一个类中。因此,为了确定最佳值,我需要访问先前计算的Y值,并从新值中减去它。这一切对我来说似乎非常麻烦,所以如果你知道一个更好的方法,我可以执行这些类型的计算请让我知道。我的示例数据表是:

X       Y       Z

1       5       10
2       3       20
3       4       30
4       6       40
5       12      50
6       12      60
7       34      70
8       5       80

到目前为止,我的代码是:

class values:                                      
    def __init__(self, X, Y, Z): 

        self.X = X
        self.Y = Y
        self.Z = Z  

        #Diff = Y2 - Y1

        #if Diff > 10:
            #optimum = Z
        #else:
            #pass

        #optimum 

valueLst = []

f = open('sample.txt','r')


for i in f:
    X = i.split('\t')[0]
    Y = i.split('\t')[1]
    Z = i.split('\t')[2]

    x = values(X,Y,Z)

valueLst.append(x)

下表显示了我想要实现的操作示例。Y值的差值在第三列中计算,当差值为22时,我想返回Z值,即Z值为70。你知道吗

1       2               10
2       3       1       20
3       4       1       30
4       6       2       40
5       12      6       50
6       12      0       60
7       34      22      70
8       35      1       80

任何帮助都将不胜感激。你知道吗


Tags: 方法代码self目的元素示例类型diff
3条回答

跳过元组x,y和z的构建

diffs = [curr-prev for curr, prev in izip(islice(y, 1, None), islice(y, len(y)-1))]
max_diff = max(diffs)
Z = y[diffs.index(max_diff)+1]

首先,可以将列放入列表数据结构中:

f = open('sample.txt','r')

x, y, z = [], [], []
for i in f:
    ix, iy, iz = map(int, i.split('\t')) # the map function changes each number
                                         # to an integer from a string
    y.append(iy)
    z.append(iz)

当您有数据结构时,您可以将它们一起使用来获得您想要的其他数据结构。你知道吗

然后你可以从第二个y开始得到每一个差:

differences  = [y[i] - y[i+1] for i in range(1,len(y))]

你想要的是z和最大差值在同一个索引处,所以:

maxIndex = y.index(max(differences))
answer = z[maxIndex]

一个class似乎有点过分了。为什么不列出(x, y, z)元组?你知道吗

valueLst = []
for i in f:
    valueLst.append(tuple(i.split('\t')))

然后可以确定y值之间的差异,并从对应于最大增量y的3元组中获取最后一项z

yDiffs = [0] + list(valueLst[i][1] - valueLst[i-1][1]
                    for i in range(1, len(valueLst)))
bestZVal = valueLst[yDiffs.index(max(yDiffs))][2]

相关问题 更多 >