mensaje = [(42, 10, 4), (479, -100, 5), (70, 1, 7), (65, 500, 1)]
如果有人可以告诉我,我真的很感谢,我需要知道此列表中有4个元组。
如果我尝试使用len(mensaje)
,我会得到字符数,我的答案必须是4。
答案 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个项目)。
祝你好运。