2016-05-31 74 views
2

我有一個元組和一個元組元組。從元組元組中區分元組

import numpy as np 
a = ("Control", "Group1") 
b = (("Control", "Group1"), ("Control", "Group1", "Group2)) 

我怎麼能告訴ab根本不同?無論

print(len(a)) 
print(np.shape(a)) 
print(len(np.shape(a))) 

print(len(b)) 
print(np.shape(b)) 
print(len(np.shape(b))) 

產生相同的輸出:

2 
(2,) 
1 

在此先感謝了!

回答

5

你不能,因爲它們沒有根本的不同。

以下情況會發生什麼?

c = (("Foo", "bar"), "baz") 

它也是一個元組,它包含「裸」值以及另一個元組。

如果需要檢測的元組只包含元組,使用:

if all(isinstance(element, tuple) for element in a) 

如果需要檢測的元組只由非元組,使用:

if not any(isinstance(element, tuple) for element in a) 

兩者的上述內容的時間複雜度爲O(n)(其中na中的元素數),根據數據來源的不同,這可能並不理想。然而,這是不可避免的,除非你願意冒着實際上不具有元組元組的風險。

根據您對數據所做的操作,您可能實際上需要檢查一系列序列。在這種情況下,您應該使用Sequence ABCPython 2):

import collections.abc 
if all(isinstance(element, collections.abc.Sequence) for element in a) 
0

使用等號,==

>>> a = ("Control", "Group1") 
>>> b = (("Control", "Group1"), ("Control", "Group1", "Group2")) 
>>> a == b 
False 

如果你只是想一般結構的一個模糊的概念,和字符串元素將不包含括號,可以算括號:

>>> str(a).count('(') 
1 
>>> str(b).count('(') 
3