【问题标题】:How to create a function for recursively generating iterating functions如何创建用于递归生成迭代函数的函数
【发布时间】:2018-03-01 22:26:08
【问题描述】:

我目前有一些看起来像这样的 Python 代码:

for set_k in data:
    for tup_j in set_k:
        for tup_l in tup_j:

问题是,我希望嵌套 for 语句的数量根据用户输入而有所不同。如果我想创建一个生成 n 个像上面那样的 for 语句的函数,我该怎么做呢?

【问题讨论】:

  • 您可以将循环分离成一个函数,然后您可以递归调用该函数。具体如何工作取决于用例。

标签: python for-loop recursion user-input


【解决方案1】:
def nfor(data, n=1):
    if n == 1:
        yield from iter(data)
    else:
        for element in data:
            yield from nfor(element, n=n-1)

演示:

>>> for i in nfor(['ab', 'c'], n=1):
...     print(i)
...     
ab
c
>>> for i in nfor(['ab', 'c'], n=2):
...     print(i)
...     
a
b
c

【讨论】:

  • 请注意,yield from 语法仅适用于 Python 3。
  • 这门语言有 5 年以上历史的特性真的值得一提吗?
  • Python 3.3 确切地说是@BrendanAbel。
  • 嗯,我想很多人仍然使用 Python 2 来处理遗留代码@wim。哦,我认为你确实有一点。如果人们现在还没有移植到 Python 3,那真的不是你的问题。
  • 除非 OP 指定了较低的 Python 版本,否则这些 cmets 只是垃圾。 Python 2 EOL
猜你喜欢
  • 2021-12-09
  • 2019-03-01
  • 2021-12-31
  • 2022-06-28
  • 1970-01-01
  • 2017-08-01
  • 2016-06-09
  • 2019-04-03
  • 2016-03-01
相关资源
最近更新 更多