2015-10-02 3 views
-3

У меня есть следующий код, работающий отлично. Тем не менее, всегда пытается улучшить положение вещей, мне было интересно, если мы могли бы написать это только с одной строкой:Условный список python с одной строкой кода?

l,listSex = [], ['male1', 'female23', 'male2', 'female1', 'female2'] 
for s in listSex: 
    if 'female' in s: 
     l.append(1) 
    else: 
     l.append(0) 

Моя проблема здесь заключается в том, чтобы обработать случай еще (как в противном случае, ответ был бы довольно прост) ,

+8

'мужской' будет в каждом из них. –

ответ

5

Используйте представление списка с условным выражением.

listsSex = ['male1', 'female23', 'male2', 'female1', 'female2'] 
l = [1 if 'female' in s else 0 for s in listSex] 
+0

Спасибо. Будет ли это работать так же, если я захочу положить в него элиту? –

+1

Нет; условные выражения поддерживают только/или условия, а не ряд условий. Вы можете * устанавливать * условные выражения, но он становится уродливым: '1 if condition1 else (2 if condition2 else 3)'. (Скобки могут быть необязательными, я не помню точно, как обрабатываются условные выражения.) – chepner

0

Вы также можете использовать лямбда-выражение:

listSex=['male1','female23','male2','female1','female2'] 

l= map(lambda x: int(not('female' in x)), listSex) 

или при использовании аналогичной логики в @chepner

l = map(lambda x: int(x.startswith('male')), listSex) 
Смежные вопросы