2010-09-24 1 views
0

У меня есть переменная, которая может быть либо строкой, либо кортежем (я не знаю заранее), и мне нужно работать с ним в виде списка.выражение 'else' в понимании списка

По существу, я хочу преобразовать следующее в понимание списка.

variable = 'id' 
final = [] 
if isinstance(variable, str): 
    final.append(variable) 
elif isinstance(variable, tuple): 
    final = list(variable) 

Я думал о чем-то в строках следующего (что дает мне синтаксическую ошибку).

final = [var for var in variable if isinstance(variable, tuple) else variable] 

Я видел это question, но это не то же самое, потому что спрашивающий может использовать петлю for в конце; мой только применяется, если это кортеж.

Примечание: Я хотел бы, чтобы список понимание, чтобы работать, если я использую isinstance(variable, list), а также tuple один.

+0

Зачем вам это нужно, чтобы быть строка или кортеж? почему он не может быть unicode или списком? – aaronasterling

+2

Я не уверен, что понимание списка будет полезно здесь, потому что код, который у вас есть, не создает список по итерации. У вас даже нет цикла 'for'. –

+0

Код, который у меня отсутствует, не требует цикла for. Но если я использую 'list (variable' в понимании списка, он создает список в списке, который не то, что я хочу _ (Хотя я заметил, что ответ Матфея дает возможность обойти его). @Aaron: I не нужно _need_ это строка или кортеж. Это дано мне в этом формате. – avacariu

ответ

5

Я думаю, что вы хотите:

final = [variable] if isinstance(variable, str) else list(variable) 
+0

Спасибо! Это именно то, что я искал. – avacariu

2

Вам просто нужно немного перестроить его.

final = [var if isinstance(variable, tuple) else variable for var in variable] 

Или, может быть, я неправильно понял, и вы действительно хотите

final = variable if not isinstance(variable, tuple) else [var for var in variable] 
+0

Это даст '['id', 'id']' для примеров, так как содержит одну ссылку на строку для каждого письмо. –

+0

Спасибо, ваш второй кажется тем, что я хочу. Я принял Мэтью, потому что он был немного короче и проще (потому что он делал «list (variable)», а не «[var for var in variable]», хотя они к тому же.) – avacariu

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

  • Нет связанных вопросов^_^