如何在python中获取给定输入文件的所有列表的所有标记的长度?

如何在python中获取给定输入文件的所有列表的所有标记的长度?,python,string,python-3.x,list,file,Python,String,Python 3.x,List,File,假设我有这样一个列表L1: L1 = [['1', '0', '0', '0'], ['1', '0', '0', '0'], ['0', '0', '0', '1'], ['1', '0', '0', '0'], ['0', '0', '0', '1'], ['0', '0', '1', '0'], ['1', '0', '0', '0'], ['1', '0', '0', '0'], ['0', '0', '0', '1'], ['0', '0', '0', '1'], ['0', '0'

假设我有这样一个列表L1:

 L1 = [['1', '0', '0', '0'], ['1', '0', '0', '0'], ['0', '0', '0', '1'], ['1', '0', '0', '0'], ['0', '0', '0', '1'], ['0', '0', '1', '0'], ['1', '0', '0', '0'], ['1', '0', '0', '0'], ['0', '0', '0', '1'], ['0', '0', '0', '1'], ['0', '0', '0', '1'], ['1', '0', '0', '0'], ['0', '0', '0', '1'], ['0', '0', '0', '1'], ['0', '0', '0', '1'], ['1', '0', '0', '0'], ['1', '0', '0', '0'],['0', '0', '0', '0']]
如果我使用lenL1,它返回18,这是给定输入的列表总数

如果我需要计算输入列表的令牌总数,该怎么办?如何做到这一点? 因为每个列表都有4个由逗号分隔符分隔的标记。那么这个列表总共有72个令牌


在Python3中是否存在实现这一点的方法?非常感谢您的帮助

对于您的简单示例,只需将嵌套列表的长度相加即可:

sum(map(len, L1))
这是有效的,因为您只有一个嵌套级别;外部列表只包含嵌套列表,每个嵌套列表只包含字符串。with是一种获得总长度的非常快速的方法;一切都是用C代码处理的,Python计算循环不必在这里通过for循环

如果您知道内部列表每个只包含4个元素,您也可以计算总数:

len(L1) * 4
这是更快的;根本不需要迭代来询问每个嵌套列表对象的长度。然而,这里我们讨论的是.76和.07微秒,这在任何Python程序中都不是问题。for-loop方法as所需的时间大约是前者的两倍,为1.33微秒。不完全是永恒

如果您的输入是不规则的,因此不同嵌套级别的列表混合在一起,但其他情况下仅由对象列表组成,则需要迭代并决定每个元素的操作。下面是一个基于堆栈的函数,它将对此类结构中的所有非列表元素进行计数:

def total_length(irregular):
    total = 0
    stack = [irregular]
    while stack:
        ob = stack.pop()
        if not isinstance(ob, list):
            total += 1
        else:
            stack.extend(ob)
    return total
通过根据需要添加isinstance测试,可以将上述内容扩展到元组等

演示:

尝试以下方法:

tokens = 0
for lst in L1:
      tokens += len(lst)

print tokens

您可以对列表列表进行迭代,并对所有出现的情况进行汇总。

或者将列表展平,或者只对每个子列表的长度进行汇总。您知道吗,所有子列表的长度都相等?可能并不总是如此!什么是常规?你能详细解释一下吗?@mus:列表和非列表对象的混合体。例如['foo'、['spam'、['ham']、['bar'、['monty'、['python'、['eric'、'idle']、'vikings']、42]],谢谢Martijn!这有帮助!
tokens = 0
for lst in L1:
      tokens += len(lst)

print tokens