将元组与元组元组区分开来

Jos*_* Ho 2 python python-2.7 python-3.x

我有一个元组和一个元组元组.

import numpy as np
a = ("Control", "Group1")
b = (("Control", "Group1"), ("Control", "Group1", "Group2))
Run Code Online (Sandbox Code Playgroud)

我怎么能说这a与根本不同b?都

print(len(a))
print(np.shape(a))
print(len(np.shape(a)))
Run Code Online (Sandbox Code Playgroud)

print(len(b))
print(np.shape(b))
print(len(np.shape(b)))
Run Code Online (Sandbox Code Playgroud)

产生相同的输出:

2
(2,)
1
Run Code Online (Sandbox Code Playgroud)

再次感谢!

Jon*_*fer 5

你不能,因为它们并没有根本不同.

以下应该怎么办?

c = (("Foo", "bar"), "baz")
Run Code Online (Sandbox Code Playgroud)

它也是一个元组,它包含"裸"值以及另一个元组.

如果需要检测仅由元组组成的元组,请使用:

if all(isinstance(element, tuple) for element in a)
Run Code Online (Sandbox Code Playgroud)

如果需要检测仅包含非元组的元组,请使用:

if not any(isinstance(element, tuple) for element in a)
Run Code Online (Sandbox Code Playgroud)

上述两者都具有O(n)的时间复杂度(其中n是元素的数量a),根据数据的来源,这可能是不可取的.然而,这是不可避免的,除非你愿意承担实际上没有元组元组的风险.

根据您对数据的处理,您可能实际上想要检查一系列序列.在这种情况下,您应该使用序列ABC(Python 2):

import collections.abc
if all(isinstance(element, collections.abc.Sequence) for element in a)
Run Code Online (Sandbox Code Playgroud)