2016-09-12 3 views
-1

У меня есть массив следующим образом:Pythonic способ найти целое число в списке строк

hour = ['01','02','12'] 

и я хочу

h = 1 
str(h) in hour 

вернуть True. Какой был бы самый «питонический» способ сделать это? Конечно, я мог бы положить h с нулем, но есть ли лучший способ?

+3

Вы имеете в виду '[int (i) для i в час]'? –

+0

''% 02d "% h в час'? – citaret

+0

Вы хотите изменить свой список, изменить значение 'h' или изменить условие, которое вы проверяете? – khelwood

ответ

1

Хорошее эмпирическое правило состоит в том, что тип и структура данных должны отражать модель, которую вы имеете в виду. Так что, если ваша модель является то, что часы являются целыми числами в диапазоне 1..24, или любой другой, вы должны смоделировать их таким образом:

hours = [ int(hr) for hr in hour ] 

тогда такие вещи, как:

h in hours 

становятся чистыми и очевидными ,

+0

Что делать, если элементы в 'hour' не могут быть перенесены в int? –

+1

Тогда, конечно, ваши данные не соответствуют модели, которая у вас на уме? Если это так, существует ряд опций, в зависимости от того, откуда пришел часовой список строк: 1. Просто сработайте, если он был частью программы (разработчик должен исправить свой код). 2. Если от пользователя попробуйте/кроме, напечатать приятное сообщение об ошибке, 3. если из db и т. д. распечатать сообщение журнала и выйти или проигнорировать в зависимости от вашего варианта использования. – MMN

0
if [i for i in hour if h == int(i)]: 
    print("found it") 

[i for i in hour if h == int(i)] список понимание, которое в основном означает, генерируя список из итератор объекта. Он выглядит в hours, который является итерируемым списком, и по одному проверяет, совпадает ли это значение с h. Мы передали его int(i), потому что мы сравниваем ints и i - это строка.

В python пустой список [] возвращает false при использовании в операторах if. Поэтому, объединяя понимание списка, мы можем быстро проверить, есть ли ценность, о которой мы заботимся. Если есть список, это означает, что понимание списка обнаружило ценность, о которой мы заботимся.

+0

@JF хочу, чтобы я пошел дальше, это достаточно хорошо o.o? – MooingRawr

+0

Выглядит намного лучше! –

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