我有一个列表,条目用新行分隔:
lines=[
' 22414035.537 117786547.45218 -3116.294 \n',
' 22414038.860 22414035.186 87957488.29217 -2327.383 \n',
' 20484531.215 107646935.64119 -1170.828 \n',
' 20484533.402 20484530.680 80385700.15618 -874.345 \n',
' 22744037.211 119520718.50318 3083.940 \n',
' 22744039.645 22744037.355 89252483.05018 2302.858 \n']
我有另一个清单:
Indx=[1]
- 注意,此列表可以由多个条目填充。
我想遍历列表,如果每两行的索引等于列表中的值,Indx,那么我想什么都不做。如果每两行的indx不等于Indx的值,那么我想将相应的行和文件中的下一行添加到新文件中。
例如,在这种情况下,新文件将包含: 22414035.537 117786547.45218 -3116.294
22414038.860 22414035.186 87957488.29217 -2327.383
22744037.211 119520718.50318 3083.940
22744039.645 22744037.355 89252483.05018 2302.858
我目前遇到的问题是我无法跳到列表中的下一行。此外,即使计数与Indx列表中的值相等,我的代码也会在文件中添加行。
继承我的代码:
EditedRinexObs=open("H:\Uni Work\EditedRinexObs.16o", "a")
for line in lines:
if ('g') not in line:
count=(0)
it=iter(lines)
for x in indx:
if count != x:
EditedRinexObs.writelines(line)
EditedRinexObs.writelines("\n")
it.next()
EditedRinexObs.writelines(line)
EditedRinexObs.writelines("\n")
it.next()
count=count+1
elif count == x:
it.next()
it.next()
count=count+1
EditedRinexObs.close()
我希望这是有道理的,我不确定最新情况,在其他问题上找不到答案。谢谢你的帮助!
答案 0 :(得分:1)
如果您只想计算对,请创建一组索引并压缩每两行分组的行,只会产生索引不在集合中的行:
google.maps.event.addListener($scope.map.control.getGMap(), 'center_changed',function() {
console.log($scope.map.control.getGMap().getCenter().toUrlValue());
});
哪会给你:
def pairs(l,inds):
it = iter(l)
st = set(inds)
for ind, (a, b) in enumerate(zip(it, it)):
if ind not in st:
yield a,b
print(list(pairs(lines, Indx)))
如果你想考虑重叠对,你可以使用成对配方但是你可以得到重复,所以你需要决定你想做什么,如果是这样的话,它将是这样的:
[(' 22414035.537 117786547.45218 -3116.294 \n',
' 22414038.860 22414035.186 87957488.29217 -2327.383 \n'),
(' 22744037.211 119520718.50318 3083.940 \n',
' 22744039.645 22744037.355 89252483.05018 2302.858 \n')]
答案 1 :(得分:1)
这是一个非常简单的方法,不需要iter
,虽然我必须承认我喜欢Padraic的解决方案。 :)
我会输出到stdout,以保持简单。我已将Indx
更改为indx
以符合通常的Python约定:简单变量名称应以小写字母开头;以大写字母开头的名称用于类。我也把它变成了一个集合,因为测试集合的成员资格通常比测试列表的成员资格要快,尽管对于非常小的列表,列表可能更快。
import sys
lines = [
' 22414035.537 117786547.45218 -3116.294 \n',
' 22414038.860 22414035.186 87957488.29217 -2327.383 \n',
' 20484531.215 107646935.64119 -1170.828 \n',
' 20484533.402 20484530.680 80385700.15618 -874.345 \n',
' 22744037.211 119520718.50318 3083.940 \n',
' 22744039.645 22744037.355 89252483.05018 2302.858 \n'
]
indx = set([1])
out = sys.stdout
for i in range(len(lines) // 2):
if i not in indx:
out.write(lines[2*i])
out.write(lines[2*i + 1])
<强>输出强>
22414035.537 117786547.45218 -3116.294
22414038.860 22414035.186 87957488.29217 -2327.383
22744037.211 119520718.50318 3083.940
22744039.645 22744037.355 89252483.05018 2302.858