1

我找不到我的问题的正确答案。所以交易是这样的:我需要打印一个二维数组,但每个单元格都是一个大小为 2 的列表。这个列表中的第一个值是“H”或“S”,表示隐藏或可见。第二个是实际值。我需要像这样打印每一行: format: ("%-2s %-2s... %-2s"), what to print: if first value is 'H' print 'H' else print the second value。

请帮我完成这个任务,谢谢!

我正在尝试下一个代码:

    print ' ' , ''.join('%-2s ' % i for i in range(self.gameBoard.width)) 
    for i in range(self.gameBoard.height):
        print '%-2s'%i, ''.join('%-2s ' % v[1] for v in self.gameBoard.Matrix[i] if v[0] == 'S')

“i”代表行号。

4

3 回答 3

2

您的解决方案似乎有效,您只需要更改最后一行:

print '%-2s'%i, ''.join('%-2s ' % v[1] for v in self.gameBoard.Matrix[i] if v[0] == 'S')

到:

print '%-2s'%i, ''.join('%-2s ' % ((v[1] if v[0] == 'S' else 'H') for v in self.gameBoard.Matrix[i]))
于 2013-05-28T07:17:53.020 回答
2

最好使用 enumerate 直接遍历行

print ' ' , ''.join('%-2s ' % i for i in range(self.gameBoard.width)) 
for i, row in enumerate(self.gameBoard.Matrix):
    print '%-2s'%i, ''.join('%-2s '%(v[1] if V[0]==S else 'H') for v in row) 

最好使用format而不是%格式化

print ' ' , ' '.join(format(i, '2') for i in range(self.gameBoard.width)) 
for i, row in enumerate(self.gameBoard.Matrix):
    print '%-2s'%i, ' '.join(format(v[1] if V[0]==S else 'H', '2') for v in row) 
于 2013-05-28T07:32:02.870 回答
1

你的意思是这样的:

$a = [['H',1], ['H',2],['S',3],['H',4], ['S',5]]
$print [k if k=='H' else v for k,v in a]
['H', 'H', 3, 'H', 5]
于 2013-05-28T07:06:43.590 回答