如何在Python中压缩此代码?

时间:2014-01-27 02:19:50

标签: 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)

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

作为一般设计原则,每当您发现自己命名row_1row_2row_3等内容时,您可能会认为应该改为数组,rows,您可以使用它来索引而不需要大if树。

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

或者正如Ignacio Vasquez-Abrams指出的那样,在Python 3中你可以进一步压缩它:

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

请注意,我还将变量命名更改为符合常规Python约定,即局部变量名称应全部为小写。

答案 2 :(得分:0)

除了上述优化之外,您还可以使用"".join()而不是单独添加。

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

此外,您可以使用defaultdict

中的collections
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)))