2014-06-04 2 views
2

У меня есть список на python, и я хочу, чтобы все значения в списке были больше некоторого значения. Если нет, то я хочу установить его для этого значения.Убедитесь, что все значения списка меньше определенного числа, если не установлены его число

например: давайте предположим, что список

a = [1,2,3,4] 

и значение для сравнения: 3. Таким образом, я хочу, чтобы список стал

a = [3,3,3,4] 

Я могу сделать это, перебирая все элементов в списке. Есть ли лучший способ сделать это?

+0

Звучит просто. что ты уже испробовал? –

+0

@Tichodromamuraria Я сделал это через цикл, но хочу знать, что это лучший способ сделать это, без использования цикла. – Sudar

+0

@Sundar Поскольку вам нужно пройти через каждый элемент в списке, вы должны пройти весь список, который сводится к запуску цикла. Мне было интересно, можете ли вы проверить это условие, - это элемент, добавляемый Wazza

ответ

4

Вы можете восстановить список с помощью простого условного выражения и списка понимания, как этот

a = [1, 2, 3, 4] 
print [item if item > 3 else 3 for item in a] 
# [3, 3, 3, 4] 

Для каждого item в a, он проверяет, является ли она больше, чем 3, а затем использовать item как это иным образом использовать 3.

Это похоже, но очень эффективно, чем ниже,

result = [] 
for item in a: 
    if item > 3: 
     result.append(item) 
    else: 
     result.append(3) 

Но помните, что список понимание создает новый список. Таким образом, вам, возможно, придется сделать

a = [item if item > 3 else 3 for item in a] 
+0

Спасибо, что работает. Я должен подождать еще 10 минут, чтобы принять ваш ответ, хотя :) С точки зрения производительности и создавать новые списки? Итак, как первое решение лучше с точки зрения производительности? – Sudar

+1

@Sudar Каждый раз, когда метод 'append' в' result' должен быть разрешен во время выполнения. Хотя мы можем назначить это переменной, например 'append_method = result.append', и использовать ее как' append_method (item) ', байт-код, сгенерированный для List List, очень оптимизирован, чем обычная итерированная версия. – thefourtheye

+0

Это имеет смысл. Спасибо за объяснение. – Sudar

Смежные вопросы