- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我之前发布了一些关于索引超出范围错误的代码;但是,在解决该错误后,我意识到获取必要信息的过程存在缺陷。
我在 Python 中编写了一个 for 循环,用于在数据文件中搜索标识符匹配且另一个参数发生重大更改的实例。当该实例发生时,相关数据将输出到文本文件。我没有意识到我想忽略任何后续出现的相同情况。我只想记录第一次出现的情况,然后继续处理文件,直到出现具有不同标识符的情况,继续该过程直到文件末尾。
输入数据如下所示:
0000 0.0000000000 185263.9890 105232.4887 0.0000000000 345.0928095 0.2982502454
0001 0.0000000000 185163.8872 105235.6420 0.0000000000 344.4662790 0.5691114931
0001 218.1599792 185187.4241 105332.8326 100.0000000 30.21264632 0.4583792149
0001 2070.891273 185259.6501 105401.9948 200.0000000 342.4030385 0.05397436763
0002 0.0000000000 185073.8381 105257.5082 0.0000000000 289.0103714 0.1765702856
0002 548.7104537 185007.5650 105182.6224 100.0000000 283.1207050 0.1822454800
0002 4339.891390 184907.6061 105179.7550 200.0000000 235.0171868 0.02637700539
0003 0.0000000000 185044.6468 105355.0609 0.0000000000 141.5931561 0.5491341407
0004 0.0000000000 185037.7703 105455.3306 0.0000000000 148.8916916 0.9710776916
0004 140.8620875 185106.3138 105382.5172 100.0000000 122.1786717 0.7099142273
0004 602.2794100 185206.2952 105384.4448 200.0000000 96.31412264 0.2167235496
0004 2841.576352 185251.6140 105424.2290 260.3040892 139.3786179 0.02692992078
0005 0.0000000000 185879.1193 105481.7119 0.0000000000 240.1629722 0.1176913655
0005 155.2441594 185779.6779 105492.2674 100.0000000 289.7377882 0.6441466166
0005 305.7366429 185688.7618 105533.9118 200.0000000 296.1130146 0.6644850139
0005 632.1957592 185600.2198 105580.3909 300.0000000 298.9600016 0.3063170700
0005 889.3161045 185516.5649 105549.4496 389.1936581 32.05095338 0.3468945953
0005 1114.532354 185538.1521 105576.9088 424.1223441 8.425251603 0.1550895465
0005 1282.115239 185545.3480 105477.1680 524.1223441 3.718447942 0.5967196476
每行的第一项是标识符。每行的第三项和第四项是坐标点。每行中的第六项是方向角值(这是感兴趣的参数)。目标是找到具有相同标识符的两条线,并比较方向角值是否有显着变化(在本例中大于 90 度),然后记录标识符和坐标点。例如:
0001 0.0000000000 185163.8872 105235.6420 0.0000000000 344.4662790 0.5691114931
0001 218.1599792 185187.4241 105332.8326 100.0000000 30.21264632 0.4583792149
这两行中,标识符0001匹配,方向角变化超过90度。此条件由 for 循环中的 if 语句标记,并将标识符和坐标点输出到文本文件。我有这个过程。但是...
0001 0.0000000000 185163.8872 105235.6420 0.0000000000 344.4662790 0.5691114931
0001 218.1599792 185187.4241 105332.8326 100.0000000 30.21264632 0.4583792149
0001 2070.891273 185259.6501 105401.9948 200.0000000 342.4030385 0.05397436763
序列中的第三行也与标识符匹配,并且方向角变化大于 90 度,因此它也会被条件语句标记并记录到输出文件中。我想忽略该条件的任何重复实例,只记录第一次出现的情况。
此外,当比较的两行没有匹配的标识符时,我想标记并记录坐标数据,尽管我认为我可以将其作为 if/else 与其他条件组合的一部分来处理。更重要的是能够忽略对于已经标记和记录的标识符重复出现的大于 90 度的方向角变化。由于对 Python(以及一般编程)不太熟悉,我似乎无法找到针对此场景的现有解决方案。我不一定在寻找复杂的解决方案。我只需要捕获一组特定的数据以便在 ArcGIS 项目中重复使用。
感谢您的建议。
line1 = trackdata.readline()
line2 = trackdata.readline()
for i in range(l-1):
file_no1 = line1.split()[0]
time1 = line1.split()[1]
x1 = line1.split()[2]
y1 = line1.split()[3]
length1 = line1.split()[4]
flow_dir1 = float(line1.split()[5])
flow_mag1 = line1.split()[6]
file_no2 = line2.split()[0]
time2 = line2.split()[1]
x2 = line2.split()[2]
y2 = line2.split()[3]
length2 = line2.split()[4]
flow_dir2 = float(line2.split()[5])
flow_mag2 = line2.split()[6]
if file_no1 == file_no2:
if abs(flow_dir2 - flow_dir1) > 90.0:
print >> coordinates1, file_no1, x1, y1
line1 = line2
line2 = trackdata.readline()
最佳答案
你可以尝试这样的事情;
if file_no1 == file_no2:
if abs(flow_dir2 - flow_dir1) > 90.0:
print >> coordinates1, file_no1, x1, y1
tempLine = trackdata.readline() # grabs next line
temp_no = tempLine.split()[0] # grabs file id
while temp_no == file_no1: # runs while its the same as the file
# id that gave us the condition
tempLine = trackdata.readline()
temp_no = tempLine.split()[0]
line1 = tempLine # set new lines
line2 = trackdata.readline()
if file_no1 = line1.split()[0]:
line1 = line2
line2 = trackdata.readline()
这里要检查的事情是确保您不会尝试读取超过文件末尾的内容,因此您需要为此添加检查
关于python - 忽略条件的后续实例(for 循环和 if 语句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28751404/
创建一个“海盗对话”,可以选择左手或右手。我希望它对“左”和“右”的不同拼写做出积极的回答(正如您将在代码中看到的那样),但是,当我为所有非“右”或“左”的输入添加最终的“else”代码时,它给了我一
With 语句 对一个对象执行一系列的语句。 With object statements End With 参数 object 必需的部分
While...Wend 语句 当指定的条件为 True 时,执行一系列的语句。 While condition  ; Version [stat
所以我正在处理的代码有一个小问题。 while True: r = input("Line: ") n = r.split() if r == " ":
我有一个对象数组: var contacts = [ { "firstName": "Akira", "lastName": "Laine", "number"
int main() { int f=fun(); ... } int fun() { return 1; return 2; } 在上面的程序中,当从main函数中调用一个
我的项目中有很多 if 语句、嵌套 if 语句和 if-else 语句,我正在考虑将它们更改为 switch 语句。其中一些将具有嵌套的 switch 语句。我知道就编译而言,switch 语句通常更
Rem 语句 包含程序中的解释性注释。 Rem comment 或 ' comment comment 参数是需要包含的注释文本。在 Rem 关键字和 comment 之间应有一个空格。
ReDim 语句 在过程级中声明动态数组变量并分配或重新分配存储空间。 ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
Randomize 语句 初始化随机数生成器。 Randomize [number] number 参数可以是任何有效的数值表达式。 说明 Randomize 使用 number 参数初始
Public 语句 定义公有变量并分配存储空间。在 Class 块中定义私有变量。 Public varname[([subscripts])][, varname[([subscripts])
Sub 语句 声明 Sub 过程的名称、参数以及构成其主体的代码。 [Public [Default]| Private] Sub name [( arglist )]
Set 语句 将对象引用赋给一个variable或property,或者将对象引用与事件关联。 Set objectvar = {objectexpression | New classname
我有这个代码块,有时第一个 if 语句先运行,有时第二个 if 语句先运行。我不确定为什么会这样,因为我认为 javascript 是同步的。 for (let i = 0; i < dataObje
这是一个 javascript 代码,我想把它写成这样:如果此人回答是,则回复“那很酷”,如果此人回答否,则回复“我会让你开心”,如果此人回答的问题包含"is"或“否”,请说“仅键入”是或否,没有任何
这是我的任务,我尝试仅使用简短的 if 语句来完成此任务,我得到的唯一错误是使用“(0.5<=ratio<2 )”,除此之外,构造正确吗? Scanner scn = new Scanner(
有没有办法在 select 语句中使用 if 语句? 我不能在这个中使用 Case 语句。实际上我正在使用 iReport 并且我有一个参数。我想要做的是,如果用户没有输入某个参数,它将选择所有实例。
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: If vs. Switch Speed 我将以 C++ 为例,但我要问的问题不是针对特定语言的。我的意思是一
Property Set 语句 在 Class 块中,声明名称、参数和代码,这些构成了将引用设置到对象的 Property 过程的主体。 [Public | Private] Pro
Property Let 语句 在 Class 块中,声明名称、参数和代码等,它们构成了赋值(设置)的 Property 过程的主体。 [Public | Private] Prop
我是一名优秀的程序员,十分优秀!