2013-01-08 2 views
2

Есть ли способ упростить эту попытку/исключить только одну строку с лямбдой?Просто попробуйте/за исключением лямбда - Python?

alist = ['foo','bar','duh'] 

for j,i in enumerate(alist): 
    try: 
    iplus1 = i+alist[j+1] 
    except IndexError: 
    iplus1 = "" 

Есть другой способ, кроме:

j = '' if IndexError else trg[pos] 
+2

Итак ... что вы пытаетесь выполнить, здесь? – Ryan

+0

Это странный код –

+0

Предполагается сделать некоторое динамическое программирование, когда я вижу предыдущий и следующий элемент в списке и принимаю некоторые решения, основываясь на некоторой конвергенции, которую я буду вычислять. – alvas

ответ

5

Нет, Python не имеет Shorthands или упрощений в синтаксисом try/except.

Чтобы решить конкретную проблему, я бы, вероятно, использовать что-то вроде:

for j, i in enumerate(alist[:-1]): 
    iplus1 = i + alist[j + 1] 

Что бы избежать необходимости исключения.

Или, чтобы получить супер круто и родовое:

from itertools import islice 

for j, i in enumerate(islice(alist, -1)): 
    iplus1 = i + alist[j + 1] 

Альтернатива, вы можете использовать: itertools.iziplongest сделать что-то подобное:

for i, x in itertools.izip_longest(alist, alist[1:], fillvalue=None): 
    iplus1 = i + x if x is not None else "" 

Наконец, небольшую заметку по номенклатуре: i традиционно используется означает «индекс», поэтому использование for i, j in enumerate(…) было бы более «нормальным».

+1

Вам также нужно будет добавить последний элемент без суффикса. –

+0

Да, это определенно нужно учитывать. –

+0

_i традиционно используется для обозначения «индекса» _ - все же, хорошая привычка давать более заметные имена даже индексам, чтобы они не терялись в цикле длиной более 2 строк. Однобуквенные имена переменных являются ужасным наследием со дня перфорированных карт, и их следует оставить! – volcano

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