每当我附加到列表时,我该如何包括一条新行



任务是在一个列表中创建一个" 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__等)。

最新更新