任务是在一个列表中创建一个5x5的“O”网格。这是我到目前为止所写的:
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(),但我不知道这会有什么帮助。
答案 0 :(得分:2)
如果您创建列表列表,则无法控制之后如何发出换行符。我会逐行控制输出,使用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']]
答案 1 :(得分:2)
在某种程度上,您的代码已经正确无误。实际上有一个包含Os的5x5列表。
print语句只显示一行列表。
您可以改为使用 pprint :
from pprint import pprint
pprint(board)
答案 2 :(得分:0)
正如其他用户所说,我不相信你可以创建一个打印在多行上的列表。 如果目标只是将行打印为网格而你必须使用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()函数的唯一方法。
答案 3 :(得分:0)
由于这一行:
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__
等)。