Я думаю, что понимание списка - это питонический способ справиться с этим.
a = [x == 'Hello' for x in a]
Edit: Как уже упоминалось в комментариях, это будет возвращать список булевы, а не целые числа. Для целых чисел, необходимо изменить список понимание:
a = [1 if x == 'Hello' else 0 for x in a]
или
a = [int(x == 'Hello') for x in a]
Реквизит пойти в Марун Марун и Альберто Vassena для двух правильных решений.
Edit2: Я приуроченная обе версии, и вот результат:
Первый сценарий:
from timeit import default_timer as timer
a = ['Hello', 'Jello', 'Hello', 'Hello']
start = timer()
b = [1 if x == 'Hello' else 0 for x in a]
end = timer()
print b
print('without cast: {}'.format(end - start))
Результат:
[1, 0, 1, 1]
without cast: 2.86102294922e-06
Второй сценарий:
from timeit import default_timer as timer
a = ['Hello', 'Jello', 'Hello', 'Hello']
start = timer()
b = [int(x == 'Hello') for x in a]
end = timer()
print b
print('with cast: {}'.format(end - start))
Результат:
[1, 0, 1, 1]
with cast: 5.96046447754e-06
поэтому тест дает, что при использовании if else
конструкция быстрее в этом случае.
Конверсия на основе чего? – Maroun
Что делать, если бы было другое дополнительное значение, например '[" Hello "," Jello "," Hello "," Hello "," Yellow "]'? как это следует учитывать? – RomanPerekhrest
Почему «Hello» отображается 1, а не 0? Это видно первым в списке (один из возможных критериев), и он сортируется ниже, чем «Jello» (другой). Это только на основе равенства с «Привет»? Этот вопрос очень неуточнен. – DSM