任务是在一个列表中创建一个" o"的5x5网格。这就是我到目前为止写的:
board = ["O"]
def lalala(lst):
new_list = []
for item in lst:
new_list.append([item]*5)
return new_list
print lalala(board)*5
这就是现在的样子:
[['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O']]
我如何使其看起来像一个网格,类似的东西(但是一切仍然必须在一个列表中):
[['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O']]
不喜欢这样(Codecademy不接受此):
[['O', 'O', 'O', 'O', 'O']]
[['O', 'O', 'O', 'O', 'O']]
[['O', 'O', 'O', 'O', 'O']]
[['O', 'O', 'O', 'O', 'O']]
[['O', 'O', 'O', 'O', 'O']]
codecademy建议我使用range(),但我看不出有什么帮助。
如果创建列表的列表,则无法控制以后如何发出lineFeeds。我将使用join
逐行控制输出线,并人为地添加更高级别的[]
手动
怎么样:
z = lalala(board)
print("["+",n ".join(str(z) for _ in range(5))+"]")
结果:
[['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O']]
在某种程度上,您的代码已经正确。实际上,有一个5x5包含OS的列表
打印语句仅显示一行列表的列表。
您可以使用 pprint :
from pprint import pprint
pprint(board)
正如其他用户提到的那样,我不相信您可以创建一个在多行上打印的列表。如果目标只是将线路打印为网格,而您必须使用range()函数,那么也许您应该尝试:
list1 = [['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O']]
for y in range(0, len(list1)):
print list1[y]
显然,这不是解决问题的最有效方法,因为您可以完全没有range()函数,但这是我看到使用range()函数的唯一方法。
因为以下行:
new_list = []
您的最终语句正在尝试打印一个类型list
的对象。如何打印对象是由将其转换为字符串的方式定义的。这通常是由__str__()
方法统治的,对于内置的list
是不可变的,无法更改以做其他事情。
为了正确解决您的问题,可以定义一个类似于list
的类,并且当乘以(您的*5
)返回按照您想要的打印的东西:
board = ["O"]
class Lala:
def __init__(self, lalala, x):
self.lalala = lalala
self.x = x
def __str__(self):
res = '['
for i in range(self.x):
for l in self.lalala:
if i != 0:
res += ' '
res += str(l)
if i != self.x-1:
res += ',n'
res += ']'
return res
class Lalala(list):
def __mul__(self, x):
return Lala(self, x)
def lalala(lst):
new_list = Lalala()
for item in lst:
new_list.append([item]*5)
return new_list
print(lalala(board)*5)
这给出了:
[['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O']]
根据您对lalala(board)*5
的使用,您可能需要定义其他方法(__getitem__
等)。