Python 3.x 用python编写多个嵌套for循环和if语句的好方法。
我试图读取“n”个目录/数据文件,从每个目录中读取7列,然后使用前面读取的7列中的某些列检查n*(n-1)“if”语句是否为真。如果条件为真,那么做一些数学运算,否则什么都不做 例如,如果我比较两个目录,那么我有2个“如果”语句要测试,如果我有3个目录,那么我有6个“如果”语句要检查 每个目录大约有10000行和40列,但它们的长度通常不同 目前,我有一个用于3个目录的工作代码,其中我将三个目录作为嵌套循环读取,并应用我的6个条件 下面是我的代码示例:Python 3.x 用python编写多个嵌套for循环和if语句的好方法。,python-3.x,recursion,multiprocessing,nested-loops,Python 3.x,Recursion,Multiprocessing,Nested Loops,我试图读取“n”个目录/数据文件,从每个目录中读取7列,然后使用前面读取的7列中的某些列检查n*(n-1)“if”语句是否为真。如果条件为真,那么做一些数学运算,否则什么都不做 例如,如果我比较两个目录,那么我有2个“如果”语句要测试,如果我有3个目录,那么我有6个“如果”语句要检查 每个目录大约有10000行和40列,但它们的长度通常不同 目前,我有一个用于3个目录的工作代码,其中我将三个目录作为嵌套循环读取,并应用我的6个条件 下面是我的代码示例: path="xx" #Location o
path="xx" #Location of all input files.
cat1 = ascii.read(path + file3, guess=False)
data2 = fits.getdata(path+file2, 1)
cat2 = Table(data2)
cat3 = Table.read(path + 'xyz.tbl', format='ipac')
for i in range(len(cat1)):
(ra1,dec1,flux1,flux1error,maj1,minor1,ang1)= (cat1['RA_Degrees'][i],
cat1['DEC_Degrees'][i],cat1['fitted_total_flux'][i],
cat1['fitted_total_flux_error'][i],cat1['BMajor_Degrees'][i],
cat1['BMinor_Degrees'][i],cat1['position_angle_deg'][i])
ang1=ang1*np.pi/180
for j in range(len(cat2)):
(ra2,dec2,total_cat2,total_error_cat2,maj2,min2,pa2)= (cat2['ra'][j],cat2['dec'][j],
cat2['total'][j],cat2['total_err'][j],
cat2['BMajor'][j],cat2['Bminor'][j],cat2['Position Angle'][j]
for k in range(len(cat3)):
(ra3,dec3,total_cat2,total_error_cat2,maj3,min3,pa3)=(cat3['ra'][k],
cat3['dec'][k],cat3['flux'][k],cat3['ferr'][k],cat3['bmaj'][k],
cat3['bmin'][k],cat3['pa'][k])
if np.all(
np.all(np.abs(ra2-ra1)< maj1+ maj2 and
np.all(np.abs(dec2-dec1)< maj1 + maj2) and
np.all(np.abs(ra3-ra2)< maj2 + maj3) and
np.all(np.abs(dec3-dec2)< maj2 + maj3) and
np.all(np.abs(ra3-ra1)< maj1 + maj3) and
np.all(np.abs(dec3-dec1)< maj1 + maj3)
):
path=“xx”#所有输入文件的位置。
cat1=ascii.read(路径+文件3,猜测=False)
data2=fits.getdata(路径+文件2,1)
cat2=表格(数据2)
cat3=Table.read(路径+'xyz.tbl',格式='ipac')
对于范围内的i(len(cat1)):
(ra1,dec1,flux1,flux1error,maj1,minor1,ang1)=(cat1['RA_Degrees'][i],
第1类['DEC_Degrees'][i],第1类['fitted_total_flux'][i],
第1类[“装配的总通量误差”][i],第1类[“主要度数”][i],
cat1['BMinor_Degrees'][i],cat1['position_angle_deg'][i])
ang1=ang1*np.pi/180
对于范围内的j(len(cat2)):
(ra2,dec2,总类2,总类2,主要类2,min2,pa2)=(第2类['ra'][j],第2类['dec'][j],
第二类['total'][j],第二类['total_err'][j],
cat2['B主要'][j]、cat2['B主要'][j]、cat2['位置角][j]
对于范围内的k(len(cat3)):
(ra3,dec3,total_cat2,total_error_cat2,maj3,min3,pa3)=(cat3['ra'][k],
第三类['dec'][k]、第三类['flux'][k]、第三类['ferr'][k]、第三类['bmaj'][k],
第三类['bmin'][k],第三类['pa'][k])
如果np.all(
np.all(np.abs(ra2-ra1)
我有两个与此相关的问题:
我想知道如果我想进行多重处理或尝试使用递归函数,是否最好坚持使用嵌套for循环。任何建议都将不胜感激。查找itertools包。这将为您提供一些基本工具,以迭代列列表,并将列表长度指定为参数。是的,递归有助于解决组合数学,但这个包将为您处理递归开销
这个应用程序的特定概念是7列的组合,一次取<强> n<强>。为了说明,我们考虑7列,每次取3列:总共有35个组合:7×6×5/3×2×1</p> 您将得到一个生成器,一个函数,它将按排序顺序返回35个组合中的每一个,每次返回一个。然后您可以像遍历列表一样遍历该组合。对于每个组合,遍历成对的列:
for col_list in combo_gen:
for right in range (1, n):
r_col = col_list[right]
for left in range(right):
l_col = col_list[left]
# Compare l_col and r_col
这是这个过程的基本轮廓。你能从这里开始吗