2013-06-12 2 views
2

Я хотел бы построить что-то вроде:Возможно ли иметь внутри кортежа?

A = (
    'parlament', 
    'queen/king' if not country in ('england', 'sweden', …), 
    'press', 
    'judges' 
) 

Есть ли способ построить кортеж, как это?

Я попытался

'queen/king' if not country in ('england', 'sweden', …) else None, 
'queen/king' if not country in ('england', 'sweden', …) else tuple(), 
'queen/king' if not country in ('england', 'sweden', …) else(), 

, но ничего не работает, там, кажется, не быть кортежем-None-элемент, поэтому у меня есть 3-кортеж для всех стран, рядом Англии, Швеции и т.д. для которые я получаю 4-кортежа

+1

, маловероятно, что кортеж, что вы хотите, если его Арность не является постоянным. Вам нужно либо «list», либо 4-кортеж, где во втором поле всегда есть что-то (например, «Нет»). Если вы объясните, как вы собираетесь его использовать, мы сможем дать вам лучшие ответы. – Elazar

+1

То, что вы пытались, похоже, работает на меня. Что именно не работает. Получаете ли вы «SyntaxError»? – TerryA

+0

Я мог бы использовать «список», но это не решает мою проблему поиска «do-insert-nothing» -секретного случая – Hoffmann

ответ

2

может предложить Вам следующие

A = (('parlament',) + 
    (('queen/king',) if not country in ('england', 'sweden', …) else tuple()) + 
    ('press', 'judges')) 

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

A = ('parlament', 
    'queen/king' if not country in ('england', 'sweden', …) else 'default', 
    'press', 'judges') 
+1

для тех, кто использует это решение, позаботьтесь, чтобы не забыть ',' в кортеже, иначе он взорвется – Hoffmann

7

Да, но вам нужно else заявление:

>>> country = 'australia' 
>>> A = (
... 'parlament', 
... 'queen/king' if not country in ('england', 'sweden') else 'default', 
... 'press', 
... 'judges' 
...  ) 
>>> print A 
('parlament', 'queen/king', 'press', 'judges') 

Другой электронной Xample:

>>> country = 'england' 
>>> A = (
... 'parlament', 
... 'queen/king' if not country in ('england', 'sweden') else 'default', 
... 'press', 
... 'judges' 
... ) 
>>> print A 
('parlament', 'default', 'press', 'judges') 

Это conditional expression, иначе известное как тройной условный оператор.

+0

Почему downvote? – TerryA

+0

let A быть силовыми силами в стране, как «по умолчанию» подходит к этому? – Hoffmann

+0

@ Hoffmann Это была просто строка, которую я нарисовал. Вы можете поместить его с тем, что пожелаете :) – TerryA

1

Да, вы можете, но для этого ваше тернарное условие должно быть действительным, то есть вам требуется также статья else.

троичный оператор в Python:

>>> 'x' if False else 'y' 
'y' 

Ваш код:

A = (
    'parlament', 
    'queen/king' if not country in ('england', 'sweden') else 'foo', 
    'press', 
    'judges' 
    ) 
+0

Я думаю, вы на самом деле скажем * нет, вы не можете *. Но вопрос непонятен. – Elazar

0

Вы можете использовать Ternary условный оператор например:

A= ('a', 'b', 'c' if condition else 'd') 
Смежные вопросы