2013-12-10 4 views
1

Способы конденсации этих?Конденсирующий повторяющийся код в Python?

col1 = [row1[0],row2[0],row3[0],row4[0],row5[0]] 
col2 = [row1[1],row2[1],row3[1],row4[1],row5[1]] 
col3 = [row1[2],row2[2],row3[2],row4[2],row5[2]] 
col4 = [row1[3],row2[3],row3[3],row4[3],row5[3]] 
col5 = [row1[4],row2[4],row3[4],row4[4],row5[4]] 

printedxrow1 = ["[X]","[X]","[X]","[X]","[X]"," <- V: "+str(row1.count(0))+" TOTAL: "+str(sum(row1))] 
printedxrow2 = ["[X]","[X]","[X]","[X]","[X]"," <- V: "+str(row2.count(0))+" TOTAL: "+str(sum(row2))] 
printedxrow3 = ["[X]","[X]","[X]","[X]","[X]"," <- V: "+str(row3.count(0))+" TOTAL: "+str(sum(row3))] 
printedxrow4 = ["[X]","[X]","[X]","[X]","[X]"," <- V: "+str(row4.count(0))+" TOTAL: "+str(sum(row4))] 
printedxrow5 = ["[X]","[X]","[X]","[X]","[X]"," <- V: "+str(row5.count(0))+" TOTAL: "+str(sum(row5))] 

Я в основном не уверен, как остановить повторение с меняющимися переменными. Благодарю.

+4

Очевидное решение, казалось бы, перестало бы использовать переменные переменные и вместо этого использовать многомерные массивы? –

+0

Для начала вы можете удалить первые пять строк целиком, так как ни одна из этих переменных не используется нигде в коде. – Kevin

+0

@Kevin: Это, очевидно, просто фрагмент, и вы не знаете контекста. Предположим, что переменные используются в реальной программе. –

ответ

1
rows = [row1,row2,row3,row4,row5] # you'd generate rows in a cleaner way  

cols = list(zip(*rows)) 

printedxrows = [ ("[X]","[X]","[X]","[X]","[X]"," <- V: {} TOTAL: {}" 
               .format(row.count(0), sum(row))) 
       for row in rows ] 

Примечание. Я также сделал это форматированной строкой для лучшей читаемости.

+0

Не могли бы вы объяснить, как это работает? Кроме того, он говорит: AttributeError: объект 'tuple' не имеет атрибута 'format' – Kweb123

+0

Извините, у меня были неправильные parens. '.format' - вызов метода к последней строке в кортеже, а не к самому кортежу. –

4
col1 = [row1[0],row2[0],row3[0],row4[0],row5[0]] 
col2 = [row1[1],row2[1],row3[1],row4[1],row5[1]] 
col3 = [row1[2],row2[2],row3[2],row4[2],row5[2]] 
col4 = [row1[3],row2[3],row3[3],row4[3],row5[3]] 
col5 = [row1[4],row2[4],row3[4],row4[4],row5[4]] 

Выше линии могут быть заменены:

col1, col2, col3, col4, col5 = zip(row1, row2, row3, row4, row5) 

>>> zip([1, 2, 3], [4, 5, 6], [7, 8, 9]) 
<zip object at 0x0000000002B17FC8> 
>>> col1, col2, col3 = zip([1, 2, 3], [4, 5, 6], [7, 8, 9]) 
>>> col1 
(1, 4, 7) 
>>> col2 
(2, 5, 8) 
>>> col3 
(3, 6, 9) 

См zip.

+0

И '[" [X] "," [X] "," [X] "," [X] "," [X] ", ...]' с '[" [X] "] * 5 + [...] '. – rodrigo

Смежные вопросы