简体   繁体   English

如何简化这个糟糕的代码?

[英]How can I simplify this awful code?

I'm a newb to programming and have some problems simplifying my code. 我是编程新手,在简化代码方面遇到一些问题。 I have no problem with the parts preceding this, just need to know how I can simplify this code. 我之前的部分没有问题,只需要知道如何简化此代码即可。 I'd like the code below to also plot for 12,18,20,27, and 28, in the place of "11". 我希望下面的代码在“ 11”的位置也绘制出12,18,20,27和28。 I'd appreciate any help greatly! 我将不胜感激!

simrecno1inds11 = nonzero(datasim11[:,1]==no1)[0]
simrecno2inds11 = nonzero(datasim11[:,1]==no2)[0]
simrecno3inds11 = nonzero(datasim11[:,1]==no3)[0]
simrecno4inds11 = nonzero(datasim11[:,1]==no4)[0]
simrecno5inds11 = nonzero(datasim11[:,1]==no5)[0]

simrecno7inds11 = nonzero(datasim11[:,1]==no7)[0]
simrecno8inds11 = nonzero(datasim11[:,1]==no8)[0]
simrecno9inds11 = nonzero(datasim11[:,1]==no9)[0]
simrecno10inds11 = nonzero(datasim11[:,1]==no10)[0]
simrecno11inds11 = nonzero(datasim11[:,1]==no11)[0]
simrecno12inds11 = nonzero(datasim11[:,1]==no12)[0]
simrecno13inds11 = nonzero(datasim11[:,1]==no13)[0]
simrecno14inds11 = nonzero(datasim11[:,1]==no14)[0]
simrecno15inds11 = nonzero(datasim11[:,1]==no15)[0]
simrecno16inds11 = nonzero(datasim11[:,1]==no16)[0]
simrecno17inds11 = nonzero(datasim11[:,1]==no17)[0]
simrecno18inds11 = nonzero(datasim11[:,1]==no18)[0]
simrecno19inds11 = nonzero(datasim11[:,1]==no19)[0]
simrecno20inds11 = nonzero(datasim11[:,1]==no20)[0]
simrecno21inds11 = nonzero(datasim11[:,1]==no21)[0]
simrecno22inds11 = nonzero(datasim11[:,1]==no22)[0]
simrecno23inds11 = nonzero(datasim11[:,1]==no23)[0]
simrecno24inds11 = nonzero(datasim11[:,1]==no24)[0]
simrecno25inds11 = nonzero(datasim11[:,1]==no25)[0]
simrecno26inds11 = nonzero(datasim11[:,1]==no26)[0]
simrecno27inds11 = nonzero(datasim11[:,1]==no27)[0]
simrecno28inds11 = nonzero(datasim11[:,1]==no28)[0]
simrecno29inds11 = nonzero(datasim11[:,1]==no29)[0]
simrecno30inds11 = nonzero(datasim11[:,1]==no30)[0]

recno1inds11 = nonzero(data11[:,1]==no1)[0]
recno2inds11 = nonzero(data11[:,1]==no2)[0]
recno3inds11 = nonzero(data11[:,1]==no3)[0]
recno4inds11 = nonzero(data11[:,1]==no4)[0]
recno5inds11 = nonzero(data11[:,1]==no5)[0]

recno7inds11 = nonzero(data11[:,1]==no7)[0]
recno8inds11 = nonzero(data11[:,1]==no8)[0]
recno9inds11 = nonzero(data11[:,1]==no9)[0]
recno10inds11 = nonzero(data11[:,1]==no10)[0]
recno11inds11 = nonzero(data11[:,1]==no11)[0]
recno12inds11 = nonzero(data11[:,1]==no12)[0]
recno13inds11 = nonzero(data11[:,1]==no13)[0]
recno14inds11 = nonzero(data11[:,1]==no14)[0]
recno15inds11 = nonzero(data11[:,1]==no15)[0] 
recno16inds11 = nonzero(data11[:,1]==no16)[0]
recno17inds11 = nonzero(data11[:,1]==no17)[0]
recno18inds11 = nonzero(data11[:,1]==no18)[0]
recno19inds11 = nonzero(data11[:,1]==no19)[0]
recno20inds11 = nonzero(data11[:,1]==no20)[0]
recno21inds11 = nonzero(data11[:,1]==no21)[0] 
recno22inds11 = nonzero(data11[:,1]==no22)[0]
recno23inds11 = nonzero(data11[:,1]==no23)[0]
recno24inds11 = nonzero(data11[:,1]==no24)[0]
recno25inds11 = nonzero(data11[:,1]==no25)[0]
recno26inds11 = nonzero(data11[:,1]==no26)[0]
recno27inds11 = nonzero(data11[:,1]==no27)[0]
recno28inds11 = nonzero(data11[:,1]==no28)[0]
recno29inds11 = nonzero(data11[:,1]==no29)[0]
recno30inds11 = nonzero(data11[:,1]==no30)[0]

Whatever no1 - no30 is, you need to put it in a sequence object, like a list , then loop over that sequence object to produce the output, which you will also be putting into a sequence object (in this case I think a dict will be best). 无论no1 - no30是什么,您都需要将其放入序列对象(如list ,然后在该序列对象上循环以产生输出,您也将其放入序列对象中(在这种情况下,我认为dict将最好)。

nos = [no1, no2, ..., no30]
simrecno_inds11 = {}
recno_inds11 = {}
exclude_nums = [6]
for k, no in enumerate(nos):
    if k in exclude_nums:
        continue
    simrecno_inds11[k] = nonzero(datasim11[:,1]==no)[0]
    recno28inds11[k] = nonzero(data11[:,1]==no)[0]

Now instead of accessing simrecno17inds11 , you will access simrecno_inds11[17] , and so forth. 现在,代替访问simrecno17inds11 ,您将访问simrecno_inds11[17] ,依此类推。

It seems that your "simrecnoXXindsYY" variables can be represented in a 2D array simrec[n, i] (n->no, i->inds). 看来您的“ simrecnoXXindsYY”变量可以用二维数组simrec[n, i] (n-> no,i-> inds)。 In the same way "recnoXXindsYY" can become just rec[n,i] . 以同样的方式,“ recnoXXindsYY”可以变成rec[n,i] Finally "noXX" can be a 1D array no[n] . 最后,“ noXX”可以是一维数组no[n] So your assignments have the form: 因此,您的作业具有以下形式:

simrec[n, i] = nonzero(datasim[i][:,1]==no[n])[0]
rec[n, i] = nonzero(data[i][:,1]==no[n])[0]

So you would need to cycle for all possible values of n (nos) and i (indexes). 因此,您需要为n (nos)和i (index)的所有可能值循环。

indexes = [11, 12, 18, 20, 27, 28]
nos = range(1,31)

for i in index:
    for n in nos:
        simrec[n, i] = nonzero(datasim[i][:,1]==no[n])[0]
        rec[n, i] = nonzero(data[i][:,1]==no[n])[0]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM