Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 在对分离列表的每个元素执行操作后构建列表_For Loop_Python 3.x - Fatal编程技术网

For loop 在对分离列表的每个元素执行操作后构建列表

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和snapnum,将mass的第一个元素一分为二,然后遍历列表的其余部分,如果找到该数字
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
,您可以进行类似
的比较。