Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果给定限制,如何在限制处停止循环。如何返回带有附加值的新列表?_Python_List_Function_Append - Fatal编程技术网

Python 如果给定限制,如何在限制处停止循环。如何返回带有附加值的新列表?

Python 如果给定限制,如何在限制处停止循环。如何返回带有附加值的新列表?,python,list,function,append,Python,List,Function,Append,我正在构建一个接受四个参数的函数:xs(原始列表)、old、new、以及limit=None)。给定某个值(old),如果列表中有旧号码,则将其替换为新值并返回名为newxs的新列表 第四个参数限制是一个整数,表示允许的最大替换次数。我只需要替换第一次出现的old,其余的保持不变。当limit==None时,确实没有限制(我会替换所有出现的old。 负限或零限:无更换 输入/输出示例: xs=[1,2,3,4,5] old= 2 new=100 new_xs=[1,100,3,4,5] de

我正在构建一个接受四个参数的函数:
xs(原始列表)
old
new
、以及
limit=None
)。给定某个值(
old
),如果列表中有旧号码,则将其替换为新值并返回名为
newxs
的新列表

第四个参数限制是一个整数,表示允许的最大替换次数。我只需要替换第一次出现的
old
,其余的保持不变。当
limit==None
时,确实没有限制(我会替换所有出现的
old

负限或零限:无更换

输入/输出示例:

xs=[1,2,3,4,5]
old= 2
new=100
new_xs=[1,100,3,4,5]


def replace(xs, old, new, limit=None):
    new_xs=[]
    for num in range(len(xs)):
        if num==old:
            new_xs.append(new)
    return new_xs
我不知道如何使它停止在极限,如果曾经有一个极限。

一些问题:

  • 您正在遍历
    range()
    的输出,这是一个新的整数序列,而不是
    xs
    的内容。我们可以直接循环
    xs
    来获得我们想要的值

  • 当条件匹配时,您当前仅将值附加到新的
    xs_new
    列表中,我们希望每次都附加一个值

  • 未实现指定的限制功能


  • 代码注释中的解释:

    def replace(xs, old, new, limit=None): 
        new_xs = []
        replacements = 0 # keep track of how many times we replace
        for num in xs:
            if num == old and (limit is None or replacements < limit):
                new_xs.append(new)
                replacements += 1
            else:
                new_xs.append(num) # appened the original value if no match
        return new_xs
    
    print replace(xs, old, new)
    

    我冒昧地更改了您的代码,只替换列表中的值,并返回该值。请注意,这不会更改原始列表

    def replace(xs, old, new, limit=None):
        for index,value in enumerate(xs):
            if value==old:
                xs[index]=new
        return xs
    
    基本上,它会检查您给它的列表中的值,然后如果它与旧值匹配,它会将其更改为新值。enumerate()只对每次迭代计数,并在列表中提供值,因此我可以使用该值查找旧值在列表中的位置,然后将其交换

    因此,使用xs、new、old的值:

    xs=[1,2,3,4,5]
    old= 2
    new=100
    
    new_xs = replace(xs, old, new)
    
    然后
    print(new_xs)
    给出: [1100,3,4,5]


    请注意,我没有为您实施限制,因此目前这不起任何作用。

    请填写完整的stacktrace。代码不能抛出索引器什么是完整堆栈跟踪?抱歉,我不熟悉编程运行程序时输出的副本。>>>替换(xs,旧,新,限制=无)回溯(上次调用):文件“”,文件“”中的第1行,替换索引器中的第5行:列表索引超出范围>>定义替换(xs,旧,新,限制=无):。。。新的_xs=[]。。。对于范围内的num(len(xs)):。。。如果num==old:。。。new_xs.append(xs[new])。。。return new_xs>>>replace(xs,old,new,limit=None)Traceback(最后一次调用):文件“”,第1行,在文件“”中,在替换索引器中,第5行:列表索引超出范围
    new_xs.append(xs[new])
    :这不是您发布的代码!!由于
    new=100
    xs
    大小要小得多,因此存在索引错误。将参数limit=None更改为您更改的值会影响它如何使用我的测试仪代码运行吗?是,因为
    None
    总是小于任何
    int
    你是如何实现这个限制的?你觉得这个答案比我的更正确有什么具体原因吗?我真的很好奇。它实际上是根据需要使用limit执行的。我无法使用limit=float(“inf”):我的测试仪casesAh明白了。我试试别的办法。
    xs=[1,2,3,4,5]
    old= 2
    new=100
    
    new_xs = replace(xs, old, new)