查找元组中的列表数

时间:2019-03-27 18:45:30

标签: python list tuples

我有一个函数接受两个输入(两个元组),并在继续之前检查以确保它们的大小相同。在尝试计算每个元组的长度时遇到问题。

示例:

tupA = ([1,2,3,4],[11,22,33,44])
tupB = ([1,2],[3,4],[5,6])
tupC = ([1,2,3,4,5,6,7,8,9])

当我计算每个对象的长度时,它会返回:

len(tupA) = 2
len(tupB) = 3
len(tupC) = 9

是否有一种简单的方法让len(tupC)返回1?我通过添加逗号找到了解决方法:

tupD = ([1,2,3,4,5,6],)
len(tupD) = 1

但是我不想强迫用户必须添加逗号。有更好的方法吗?

4 个答案:

答案 0 :(得分:2)

对于此类数据

tupA = ([1,2,3,4],[11,22,33,44])
tupB = ([1,2],[3,4],[5,6])
tupC = ([1,2,3,4,5,6,7,8,9])

最后一个不是tuple,您可以检查

print(type(tupC)) #prints <class 'list'>

您可以使用isinstance函数检查变量是否为给定类型,因此可以创建自己的函数

def mylen(x):
    if isinstance(x,list):
        return 1
    else:
        return len(x)

您的1会给tupC3会给tupB2会给tupA

答案 1 :(得分:1)

in the docs

所示,您必须用逗号使len正常工作
  

带有一个项目的元组是通过在值后面加上逗号来构造的。

元组的唯一好处是使其不可变, 但是如果您使用列表,就没有问题。

>>> listA = [[1,2,3,4],[11,22,33,44]]
>>> listB = [[1,2],[3,4],[5,6]]
>>> listC = [[1,2,3,4,5,6,7,8,9]]
>>> len(listA)
2
>>> len(listB)
3
>>> len(listC)
1

答案 2 :(得分:1)

如评论中所述,tupC不是元组,它是一个包含9个元素的列表。仅当逗号结尾时才是元组。

作为一种解决方法,我们可以检查它是否为列表并相应地返回结果:

def length_(tupl):
    return 1 if isinstance(tupl, list) else len(tupl)

用法

>>> tupA = ([1,2,3,4],[11,22,33,44])
>>> tupB = ([1,2],[3,4],[5,6])
>>> tupC = ([1,2,3,4,5,6,7,8,9])
>>> length_(tupA)
2
>>> length_(tupB)
3
>>> length_(tupC)
1

答案 3 :(得分:0)

请注意,tupC实际上是一个列表,而不是一个元组:

>>> tupA = ([1,2,3,4],[11,22,33,44])
>>> tupB = ([1,2],[3,4],[5,6])
>>> tupC = ([1,2,3,4,5,6,7,8,9])
>>> type(tupA), type(tupB), type(tupC)
(<class 'tuple'>, <class 'tuple'>, <class 'list'>)

如果您仍然坚持将内容保留为列表的元组而不是列表的列表,并且不想添加逗号,则可以定义自己的函数来处理:

>>> def newlength(x):
...     if type(x) == list:
...         return 1
...     return len(x)
...
>>> print(newlength(tupA))
2
>>> print(newlength(tupB))
3
>>> print(newlength(tupC))
1

编辑:对Daweo表示敬意,他在几分钟之前击败了我一个几乎完全相同的答案!