到目前为止我有一个代码:
import math
nList = [[[0,0,0],[3,2,1]],\
[[]],\
[[1,1,12]],\
[[0,0,0],[30000,40,3010],[32000,40500,7520],[0,0,10520]],\
[[15340,0,0],[104300,0,3630], [434000,4434000,63460],[400340, 404300, 9430],[10340,0,1334320]]]
MaxLengthPerTrace=[[]]
traceCount = len(nList)
prevX = 0
prevY = 0
prevT = 0
maxLengthTempList=0
def calculateLength(x1, y1, x2, y2):
return math.sqrt((x1-x2)**2 + (y1 - y2)**2)
def calculateTime (t1,t2):
return abs(t1-t2)
#Entry point
for traceIndex in range(0, len(nList)):
print 'trace: ' + str(traceIndex+1)
trace = nList[traceIndex]
for pointIndex in range(0, len(trace)):
point = trace[pointIndex]
if len(point)>0:
tempX = point[0]
tempY = point[1]
tempT = point[2]
if pointIndex != 0:
#Calulate Length here
length = calculateLength(tempX, tempY, prevX, prevY)
print length
#Calculate Maximum Length here
我该如何编写一个程序来计算长度的最大值?我为此编写了伪代码
if(length > max)
max = length;
add the length in MaxLengthPerTrace in index of traceindex
但似乎无法在python2.7.10中正确执行它。任何帮助都将不胜感激。谢谢!你知道吗
我试了一下,但没有成功,出现了一个错误:“因为我的长度: TypeError:“float”对象不可iterable
for i in length:
if i >length:
i=length
MaxLengthPerTrace.append(i)
print MaxLengthPerTrace
我对你的代码做了一点小小的改动,只是为了消除你陷入困境的地方。但是这种编写程序的方法是非常不清楚的。我强烈建议在这里增强其他人的功能性解决方案,而不是改进类似C风格的代码。你知道吗
列出长度,然后得到最大值:
希望你的代码能帮上忙。你知道吗
对于generator,这是一个很好的例子。您有一个iterable(traces),想要做一些相当复杂的事情来创建一个新的iterable(length):
在代码中,您从未设置
prevX
和prevY
,我认为这是一个bug。我猜你想要什么。你知道吗请注意我所做的更改—首先,在Python中按索引迭代是缓慢的、不可读的,而且通常不是一个好主意—Python
for
循环直接在iterables上迭代,不需要计数。如果您需要索引(在第二种情况下检查它是否不是第一个值),我们也可以使用enumerate()
来获得它。你知道吗一旦我们有了一个长度的iterable,使用
max()
内置函数获得最大长度就很简单了。你知道吗如果希望每个跟踪的最大长度,而不是整个数据集的长度,可以简单地更改函数的工作级别(删除最外层的循环并将输入参数更改为
trace
),然后在list comprehension内调用它,例如:最后,我还将代码样式更改为匹配PEP8——这并不重要,但它有助于使您的代码与您将发现的大多数示例保持一致,并使您更容易一眼就识别出内容。这主要意味着我已经重命名了变量。你知道吗
相关问题 更多 >
编程相关推荐