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)