2014-01-27 73 views
0

我有一種感覺,有一種簡單的方法可以使此代碼的功能相同,但代碼行數較少。這是在Python中。我當前的代碼:如何在Python中壓縮此代碼?

for(CheckNum,Product,Bin,Size,Color,Status) in records: 
    if CheckNum == 1: 
     row_1.append(CheckNum) 
     row_1.append(Product) 
     row_1.append(Size) 
     row_1.append(Color) 
     row_1.append(Status) 
    elif CheckNum == 2: 
     row_2.append(CheckNum) 
     row_2.append(Product) 
     row_2.append(Size) 
     row_2.append(Color) 
     row_2.append(Status) 
    elif CheckNum == 3: 
     row_3.append(CheckNum) 
     row_3.append(Product) 
     row_3.append(Size) 
     row_3.append(Color) 
     row_3.append(Status) 
    elif CheckNum == 4: 
     row_4.append(CheckNum) 
     row_4.append(Product) 
     row_4.append(Size) 
     row_4.append(Color) 
     row_4.append(Status) 
    elif CheckNum == 5: 
     row_5.append(CheckNum) 
     row_5.append(Product) 
     row_5.append(Size) 
     row_5.append(Color) 
     row_5.append(Status) 
+0

'在record中記錄:row [record [0] -1] + = record'假設'row'是一個5行的列表。即'row = [[],[],[],[],[]]' – mshsayem

+0

你跳過'Bin'的任何特殊原因? – user2357112

+0

謝謝!我試圖弄清楚爲什麼事情沒有正確顯示,只能將它鏈接到丟失垃圾箱。謝謝,哈哈! – tyler5819

回答

4
rows = {1:row_1, 2:row_2, 3:row_3, 4:row_4, 5:row_5} 
for ...: 
    rows[CheckNum].append(...) 
    ... 
+0

您是否也可以使用'extend'而不是'append'在一行中執行? – sachleen

+0

@sachleen:是的,你可以。 –

+0

有點困惑,所以這個方法和擁有:row_1 = [] row_2 = []等一樣? – tyler5819

0

除了上述的優化,你可以使用"".join(),而不是單獨追加。

row_1.append("".join(CheckNum, Product, Size, Color, Status)) 

此外,你可以使用defaultdictcollections

from collections import defaultdict 
rowsDict = defaultdict(list) 
for(CheckNum,Product,Bin,Size,Color,Status) in records: 
    rowsDict[CheckNum].append("".join((CheckNum,Product,Bin,Size,Color,Status))) 
1

作爲一般的設計原則,你發現自己命名之類的東西row_1任何時候,row_2row_3,等等,你可能想認爲你應該有一個數組,rows,然後你可以使用索引來引用,而不需要有大的if樹。

for (check_num, product, bin, size, color, status) in records: 
    rows[check_num].extend((product, bin, size, color, status)) 

或者作爲伊格納西奧巴斯克斯 - 艾布拉姆斯指出,在Python 3你甚至可以進一步壓縮這樣的:

for check_num, *rest in records: 
    rows[check_num].extend(rest) 

請注意,我也改變了變量的命名與普通的Python慣例接軌,這就是本地變量名應該全部小寫。