2017-04-18 217 views
0

設置,我有以下類型的輸入如何轉換元組的元組或INT在python

tuple_of_tuple_or_int = ((3,8),4) # it may be like (4,(3,8)) also 

我想將其轉換爲一組像

{3,8,4} # in any order 

我已經試過這:

[element for tupl in tuple_of_tuple_or_int for element in tupl] 

但它引發以下錯誤:

TypeError: 'int' object is not iterable 

回答

1

您可以修復與條件拉平但條件必須產生一個可迭代所以在此我們使用了一個1元組:

[element for tupl in tuple_of_tuple_or_int 
     for element in (tupl if isinstance(tupl, tuple) else (tupl,))] 

這導致輸入((3,8),4)要處理,就好像它是((3,8),(4,))

Python 2.7.3 
>>> tuple_of_tuple_or_int = ((3,8),4) 
>>> [element for tupl in tuple_of_tuple_or_int 
...   for element in (tupl if isinstance(tupl, tuple) else (tupl,))] 
[3, 8, 4] 

這可以通過替換isinstance(tupl, tuple)而變得更一般。

+0

這對我的作品! :D非常感謝! isinstance爲+1(tupl,元組) –

0

這是一個有點矯枉過正您的問題,但它可能有助於未來的用戶平嵌套tuples成一個單一的tuplelist

def flatten(T): 
    if not isinstance(T,tuple): return (T,) 
    elif len(T) == 0: return() 
    else: return flatten(T[0]) + flatten(T[1:]) 

tuple_of_tuple_or_int = ((3,8),4) 

print flatten(tuple_of_tuple_or_int) # flatten tuple 
# (3, 8, 4) 

print list(flatten(tuple_of_tuple_or_int)) # flatten list 
# [3, 8, 4]