цикл for, который заменяет элемент на основе его значения - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть список целых чисел, и я пытаюсь определить функцию, которая перебирает все элементы, чтобы проверить, если они меньше 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 голосов
/ 24 сентября 2018

Есть пара ошибок в цикле for, который вы написали.Во-первых, оператор return находится внутри цикла, что делает его выходом сразу после оператора if или оператора else, в зависимости от того, к чему он идет первым.Во-вторых, вы делаете ошибку с тем, как вы индексируете.Если вы хотите получить доступ к элементам через индекс, вместо этого вы используете диапазон.Вот правильная реализация для функции, которую вы хотите:

def clear(x):

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

    return str(x)
0 голосов
/ 24 сентября 2018

Вы можете сделать это одной строкой, создав список нулей, если любой из элементов в списке меньше 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]
0 голосов
/ 24 сентября 2018
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, затем верните все нули или оставьте список как есть. </p>

0 голосов
/ 24 сентября 2018

Добро пожаловать в 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

...