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

2024-06-17 18:04:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个接受四个参数的函数:xs(original list)oldnew,和{})。给定一个特定的值(old),如果旧数字在列表中,则用新值替换它并返回一个名为new_xs的新列表。在

第四个参数限制是一个整数,表示允许的最大替换数。我只需要替换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

我不知道如何让它停在极限,如果有极限的话。在


Tags: 函数none列表new参数数字整数num
2条回答

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

def replace(xs, old, new, limit=None):
    for index,value in enumerate(xs):
        if value==old:
            xs[index]=new
    return xs

基本上,它检查你给它的列表中的值,如果它与旧值匹配,它会将其更改为新值。enumerate()只计算您所做的每一次迭代,并在列表中提供值,因此我可以使用该值查找旧值在列表中的位置,然后将其交换出去。在

所以,使用你的xs值,新值,旧值:

^{pr2}$

然后print(new_xs)给出: [1100,3,4,5]

注意,我没有为你实现一个限制,所以现在什么也不做。在

几个问题:

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

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

  3. 指定的限制功能未实现。


规范注释中的说明:

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)

输入/输出示例:

^{pr2}$

相关问题 更多 >