我正在尝试读取“n”目录/数据文件,从每个目录中读取7列,然后使用之前读取的7列中的某些列检查n *(n-1)“if”语句是否为真。如果条件为真,那么做一些数学运算,否则什么都不做。
例如,如果我比较两个目录,那么我有2个“if”语句要测试,如果我有3个目录,那么我有6个“if”语句要检查。
每个目录大约有10,000行和大约40列,但它们的长度通常彼此不同。
目前,我有3个目录的工作代码,我将这三个目录读作嵌套for循环并应用我的6个条件。
以下是我的代码示例:
x
我有两个与此相关的问题:
对于第一个问题,我查找了下面给出的链接中的递归函数,但我的问题是我可以使用它,因为我要检查的条件数也取决于“n”,并且列名在目录中通常不是同类的。例如:一个目录可能将Right Ascension称为'RA',另一个目录可能将其称为'ra'或'Right Ascension'。
对于第二个问题,我试图在文档之后使用多处理。
https://docs.python.org/2/library/multiprocessing.html
如果我想进行多处理或尝试使用递归函数,我想知道是否更好地坚持嵌套for循环。任何意见,将不胜感激。
答案 0 :(得分:1)
查找 itertools 包。这将为您提供一些迭代列列表的基本工具,并将列表长度指定为参数。是的,递归有助于解决组合,但是这个包将为你处理递归开销。
此应用程序所需的特定概念是7列的组合,一次 n 。为了便于说明,我们考虑7列,一次取3个:总共35个组合:7 * 6 * 5/3 * 2 * 1
你会得到一个生成器,这个函数将按照整理顺序返回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
这是该过程的基本概要。你能从这里拿走吗?