缩短Python 3.x中的重复代码?

时间:2013-12-11 14:42:52

标签: python python-3.x

我想我已经开始了解这一点。对于此代码:

printedxrow7 = ["V "+str(cols[0].count(0)),"V "+str(cols[1].count(0)),"V "+str(cols[2].count(0)),"V "+str(cols[3].count(0)),"V "+str(cols[4].count(0))]
printedxrow8 = [str(sum(cols[0])),str(sum(cols[1])),str(sum(cols[2])),str(sum(cols[3])),str(sum(cols[4]))]
numgood = (((rows[0]).count(2))+((rows[0]).count(3)+(rows[1]).count(2))+((rows[1]).count(3))+((rows[2]).count(2))+((rows[2]).count(3))+((rows[3]).count(2))+((rows[3]).count(3))+((rows[4]).count(2))+((rows[4]).count(3)))

我想把它浓缩成:

rows = [[convert[random.randint(0,7)] for _ in range(5)] for _ in range(5)]
cols = list(zip(*rows))
printedrows = ["\n"+ "[X]"*5 + "  <- V: {}   TOTAL: {}".format(row.count(0), sum(row)) for row in rows]
printcolvolt = ["V:{}".format(col.count(0) for col in cols)]
printcolcount = ["T:{}".format(sum(col) for col in cols)]
numgood = numtiles - rows.count(0)

为什么我得到at 0x030116C0&gt;错误? (我为上下文添加了其余的代码。)

2 个答案:

答案 0 :(得分:1)

您在第1行和第2行中有SyntaxErrorformat来电时缺少右括号),并且在编辑帖子时将其放在错误的位置。

printcolvolt = ["V:{}".format(col.count(0)) for col in cols]
                                          ^

否则,您可以格式化生成器col.count(0) for col in cols本身,而不是它生成的值。

对于第3行,我认为你应该有像

这样的东西
numgood = sum(row.count(2) + row.count(3) for row in rows)

否则,你试图计算我假设的列表列表中有多少个零,这些列表总是给出零。我不知道numtiles是什么。

N.B。如果您说出问题实际上是什么(例如输入,预期输出,实际输出/错误)而不仅仅是“为什么这不起作用”将会更有帮助。

答案 1 :(得分:0)

您必须在所指的功能之后添加括号:

printcolvolt = ["V:{}".format(col.count(0)) for col in cols]
printcolcount = ["T:{}".format(sum(col)) for col in cols]

否则,

#WRONG
printcolvolt = ["V:{}".format(col.count(0) for col in cols)]

将创建generator object(您使用generator object <genexpr> at ...看到)并尝试打印此内容,因为for ... in位于括号内。