【问题标题】:Returning for loop inside a while loop in python在python中的while循环内返回for循环
【发布时间】:2015-02-24 07:07:00
【问题描述】:

我正在尝试创建一个返回以下内容的函数:

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

【问题讨论】:

  • 尝试将值保存在一个元素中,而不是打印。然后将该元素添加到数组/列表中。
  • 你希望它成为generator 函数吗?
  • 是的,我猜。我只需要该函数返回正确的值而不是打印它们

标签: python loops python-3.x return


【解决方案1】:
>>> 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,) 即可处理。

剩下的就是打印每一行。

【讨论】:

  • 您使用的是 python2,我将此代码针对使用 Py3 的 OP。先做from __future__ import print_function
  • 问题是它仍在打印...我需要它以某种方式工作,如果我执行 print(izpisi(polje)),它将返回 42334 44423 21142 14221
  • 给你:return '\n'.join(''.join(map(str, x)) for x in zip(*map(reversed, polje)))。请注意,最好是逐行打印,然后在内存中保留一个可能很大的字符串
【解决方案2】:

您可以更改代码以将项目存储在 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

【讨论】:

    【解决方案3】:
    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)
    

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 2019-11-10
      • 2018-11-05
      • 2012-09-19
      • 1970-01-01
      • 2020-10-09
      • 2018-10-14
      • 2017-11-09
      • 1970-01-01
      相关资源
      最近更新 更多