簡體   English   中英

如何簡化這個糟糕的代碼?

[英]How can I simplify this awful code?

我是編程新手,在簡化代碼方面遇到一些問題。 我之前的部分沒有問題,只需要知道如何簡化此代碼即可。 我希望下面的代碼在“ 11”的位置也繪制出12,18,20,27和28。 我將不勝感激!

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]

無論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]

現在,代替訪問simrecno17inds11 ,您將訪問simrecno_inds11[17] ,依此類推。

看來您的“ simrecnoXXindsYY”變量可以用二維數組simrec[n, i] (n-> no,i-> inds)。 以同樣的方式,“ recnoXXindsYY”可以變成rec[n,i] 最后,“ noXX”可以是一維數組no[n] 因此,您的作業具有以下形式:

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

因此,您需要為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