在python中的while循环中返回循环

时间:2014-12-27 09:52:51

标签: python loops python-3.x return

我正在尝试创建一个返回此函数的函数:

42334
44423
21142
14221

由此:

polje = [[1, 2, 4, 4], [4, 1, 4, 2], [2, 1, 4, 3], [2, 4, 2, 3], [1, 2, 3, 4]]

该函数只是遍历列表并从最后一个开始打印它们的元素。我已经能够通过打印获得正确的结果,但我正在尝试使其能够简单地返回结果。我该怎么做?我已经尝试过发电机,单线换环等等,但互联网上的笔记并不丰富,而且经常以复杂的方式写作......

这是我到目前为止的代码:

def izpisi(polje):
    i = len(polje[0]) - 1
    while i >= 0:
        for e in polje:
            print(e[i], end="")
        i -= 1
        print("\n")
    return 0

3 个答案:

答案 0 :(得分:2)

>>> polje = [[1, 2, 4, 4], [4, 1, 4, 2], [2, 1, 4, 3], [2, 4, 2, 3], [1, 2, 3, 4]]
>>> def izpisi(polje):
        return zip(*map(reversed, polje))

>>> for line in izpisi(polje):
        print(*line, sep='')


42334
44423
21142
14221

zip(*x)转置矩阵。但是,从最后一列开始,我只需添加map(reversed,)来处理它。

其余的只是打印每一行。

答案 1 :(得分:1)

您可以更改代码以将项目存储在list中,而不是打印它们。 并将每个list存储在另一个list中,以便返回所有这些内容。

像这样:

def izpisi(polje):
    a = []
    i = len(polje[0]) - 1
    while i >= 0:
        l = []
        for e in polje:
            l.append(e[i])
        i -= 1
        a.append(l)
    return a

答案 2 :(得分:0)

def izpisi(polje):
    return '\n'.join([ # inserts '\n' between the lines
        ''.join(map(str, sublst)) # converts list to string of numbers
        for sublst in zip(*polje) # zip(*...) transposes your matrix
    ][::-1]) # [::-1] reverses the list

polje = [[1, 2, 4, 4], [4, 1, 4, 2], [2, 1, 4, 3], [2, 4, 2, 3], [1, 2, 3, 4]]
print izpisi(polje)