For loop 在对分离列表的每个元素执行操作后构建列表
我的任务应该是直截了当的。我有一个非常大的数据文件,我只想从中提取特定的数据。我想在开始时读两列,称之为mass和snapnum,将mass的第一个元素一分为二,然后遍历列表的其余部分,如果找到该数字For loop 在对分离列表的每个元素执行操作后构建列表,for-loop,python-3.x,For Loop,Python 3.x,我的任务应该是直截了当的。我有一个非常大的数据文件,我只想从中提取特定的数据。我想在开始时读两列,称之为mass和snapnum,将mass的第一个元素一分为二,然后遍历列表的其余部分,如果找到该数字mass/2,则将其添加到新列表以及snapnum列表中的相应元素 我的测试数据如下: ///HEADER 1000 400 100 50 200 300 800 400 50 25 100 300 500 100 400 200
mass/2
,则将其添加到新列表以及snapnum列表中的相应元素
我的测试数据如下:
///HEADER
1000 400
100 50
200 300
800 400
50 25
100 300
500 100
400 200
我期望的结果是
500 100
50 25
100 300
400 200
我的代码尝试
MASS = []
MASS2 = []
SNAPNUM = []
for line in nlines: #Loop Strips empty lines as well as replaces tabs with space
if line !='':
line = line.strip()
line = line.replace('\t',' ')
columns = line.split()
snapnum = columns[1]
mass = float(columns[0])
mass2 = mass/2.;print(mass/2) #divide element in mass by half.
if mass == mass2:
MASS2.append(mass2)
SNAPNUM.append(snapnum)
continue
print(MASS2)
print(SNAPNUM)
我得到的结果
500.0
50.0
100.0
400.0
25.0
50.0
250.0
200.0
[]
[]
似乎MASS2和SNAPNUM列表没有追加。如果我将条件更改为
If mass,我发现我所需要的只是一个嵌套的循环,它为循环建立了适当的索引
for line in nlines:
if line !='':
line = line.strip()
line = line.replace(',',' ')
columns = line.split()
snapnum = columns[8]
mass = float(columns[6])
MASS.append(mass)
mass2 = mass/2
MASS2.append(mass2)
SNAPNUM.append(snapnum)
for i in range(N):
for j in range(i,N):
if (-0.2)*MASS2[i] <= MASS[j] <= (0.2)*MASS2[i]:
MASS3.append(MASS2[i])
SNAPNUM2.append(SNAPNUM[j])
对于nlines中的行:
如果行!='':
line=line.strip()
行=行。替换(',','')
columns=line.split()
snapnum=列[8]
质量=浮动(列[6])
MASS.append(MASS)
质量2=质量/2
MASS2.append(MASS2)
SNAPNUM.append(SNAPNUM)
对于范围(N)中的i:
对于范围(i,N)内的j:
如果(-0.2)*MASS2[i]如果质量==MASS2
实际上等同于如果质量==mass/2.0
。所以你的名单是空的对我来说并不奇怪。因为500不等于250,50不等于25,100不等于50。。。还有,这是你的实际缩进吗?对于nlines中的行,在前面加一个空格:
,如果行!='',则在前面加零个空格:代码>?似乎这应该会因为一个缩进错误而崩溃。
。缩进在复制和粘贴过程中被抛出。@Kevin,我想让它在mass/2==mass时附加,我是否应该只写一个单独的列表,然后将mass/2与原始列表进行比较?我将要处理的实际数据集非常大,而且我担心内存问题。所以当质量为零时,是否要追加?这是唯一一个等于自身除以2的数。或者你说“质量”的时候是指两种不同的东西?比如“当前线路的质量”和“第一条线路的质量”之类的?如果是这样的话,你应该给他们单独的名字,比如first\u mass
和current\u mass
。然后,如果当前质量==first\u mass/2
,您可以进行类似的比较。