我需要知道列表中的元组数

时间:2019-05-22 13:17:22

标签: python python-3.x list

mensaje = [(42, 10, 4), (479, -100, 5), (70, 1, 7), (65, 500, 1)]

如果有人可以告诉我,我真的很感谢,我需要知道此列表中有4个元组。

如果我尝试使用len(mensaje),我会得到字符数,我的答案必须是4。

3 个答案:

答案 0 :(得分:7)

我认为您将列表作为字符串,因此请尝试以下操作:

import ast

mensaje = '[(42, 10, 4), (479, -100, 5), (70, 1, 7), (65, 500, 1)]'
len(ast.literal_eval(mensaje))
>> 4

但不是:

mensaje = [(42, 10, 4), (479, -100, 5), (70, 1, 7), (65, 500, 1)]
len(mensaje)
>> 4

答案 1 :(得分:2)

如果只想计算元组的数量而不浏览列表中可迭代对象的内容,则可以使用以下方法获得答案:

>>> mensaje = [(42, 10, 4), (479, -100, 5), (70, 1, 7), (65, 500, 1)]
>>> sum(isinstance(obj, tuple) for obj in mensaje)
4
>>> 

或者,如果要检查可迭代对象内部可能包含的任何元组,则可能应该使用以下函数(也很容易支持查找其他实例类型):

>>> def count(iterable, class_or_tuple):
    def depth_first_search(iterable):
        for item in iterable:
            yield isinstance(item, class_or_tuple)
            try:
                yield from depth_first_search(item, class_or_tuple)
            except TypeError:
                pass
    return sum(depth_first_search(iterable))

>>> count(mensaje, tuple)
4
>>> 

答案 2 :(得分:0)

据我了解,您想计算列表中tuple类型的项目数,而忽略其他类型的值。

如果是这种情况,那么您不必导入任何内容,则可以使用for循环,如下所示:

amount = 0
list_of_tuples = [(1,2,3), False, (4,5,6), (7,8,9), "Hello", (10,11), 18]
for item in list_of_tuples:
  amount += (1 if type(item) == tuple else 0)

然后,当您使用以下命令打印金额时:

print(amount)

它应该输出:

4

这是因为循环通过使用type方法来验证当前项目的类型而忽略了其他类型的项目。

您还可以使用len函数通过将代码更改为以下内容来验证每个元组的长度:

amount = 0
list_of_tuples = [(1,2,3), False, (4,5,6), (7,8,9), "Hello", (10,11), 18]
for item in list_of_tuples:
  amount += (1 if (type(item) == tuple and len(item) == 3) else 0)

然后,当您打印金额时,它应该输出:

3

这是因为它忽略了最后一个元组(只有2个项目)。

祝你好运。