for循环根据其值替换元素

时间:2018-09-24 06:15:38

标签: python python-2.7 for-loop

我有一个整数列表,我正在尝试定义一个函数,该函数循环遍历每个元素以检查它们是否小于5,并根据其内容以字符串形式返回该列表。

intlist=[12, 10, 11, 23, 25, 2]

def clear(x):
    for i in x:
        if i < 5:
            x[i] = 0
        return str(x)
    else:
        return str(x)

print clear(intlist)

我的代码无法正常工作,有人可以启发我吗?

如果是,我要将列表中的所有元素更改为“ 0”。结果应该看起来像这样。

intlist=[0, 0, 0, 0, 0, 0]

但是,如果所有元素都不小于5,则输出应保持不变。

intlist=[12, 10, 11, 23, 25, 2]

4 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow!您的代码有一些逻辑问题。这是我的解决方法:

intlist=[12, 10, 11, 23, 25, 2]

def clear(x):
    for i in x:
        if i < 5:          # If this is satisfied once, return string with n times of '0'
            x = [0]*len(x) # This creates a list of zeros with same length as before
            return str(x)
    return str(x)

print clear(intlist)

此外,在您的示例中,元素2小于5,因此输出应为000000

答案 1 :(得分:0)

您可以单行执行,如果列表中的任何元素小于5,则创建零列表,否则保留列表。

intlist = [12, 10, 11, 23, 25, 2]

intlist = [0] * len(intlist) if any(x < 5 for x in intlist) else intlist

print(intlist)
# [0, 0, 0, 0, 0, 0]

答案 2 :(得分:0)

intlist=[12, 10, 11, 23, 25, 2]

def clear(x):
    if (any(i<5 for i in intlist)): return [0]*len(intlist)
    else: return(x)
print(clear(intlist)) # [0, 0, 0, 0, 0, 0]

检查是否有任何项目是<5,然后返回全零或保持列表不变。

答案 3 :(得分:0)

您编写的for循环中有两个错误。首先,return语句在循环内部,这使其在if语句或else语句之后(以先到者为准)退出。其次,您在编制索引方面犯了一个错误。如果您希望通过索引访问元素,则可以在循环范围内。这是所需功能的正确实现:

def clear(x):

    for i in range(len(x)):
        if x[i]<5:
            x[i]=0

    return str(x)
相关问题