【问题标题】:Defining my own range function that returns a list定义我自己的返回列表的范围函数
【发布时间】:2019-10-28 21:35:17
【问题描述】:

如果有人知道如何做到这一点,我正在尝试摆脱这个 yield 和 '%g' 语句并用 return 语句替换它。除此之外,我正在尝试使它真正像函数一样工作,您可以将变量传递给它并将范围作为列表获取,但我也不知道该怎么做。任何帮助,将不胜感激。我对这个很迷茫。

代码应该充当范围函数,但返回一个列表。

def myRange(start, stop=None, step=None):

    if stop == None:
        stop = start

    if step == None:
        step = 1

    while True:
        if step > 0 and start >= stop:
            break
        elif step < 0 and start <= stop:
            break
        yield ("%g" % start)
        start = start + step

lyst = myRange(0.5, 1.0, 0.1)
for num in lyst:
    print (num)

【问题讨论】:

  • 首先,你为什么不append 将项目添加到列表中而不是让它们生成?无论如何,您为什么要字符串格式 数字?最后,为什么不只是return list(range(start, stop, step))
  • 我应该怎么做而不是字符串格式?我想摆脱整个 yield 代码行。
  • 既然你想要一个列表——为什么不建立一个呢?既然您不想对数字进行字符串格式化——为什么不按原样使用数字呢?
  • 我收到此错误 - TypeError: 'NoneType' object is not iterable - 当我删除代码行时。以及我需要摆脱 - lyst = myRange(0.5, 1.0, 0.1) for num in lyst: print (num)
  • 您必须替换该行,而不是删除它。你知道如何追加到列表吗?

标签: python list user-defined-functions


【解决方案1】:

不要使用yield,只需创建一个变量来保存结果列表并不断添加:

    lst = []
    while True:
        if step > 0 and start >= stop:
            break
        elif step < 0 and start <= stop:
            break
        lst.append("%g" % start)
        start += step
    return lst

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2018-09-10
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    相关资源
    最近更新 更多