使用len()测量列表的长度会产生错误的结果

时间:2016-07-01 14:50:40

标签: python

帮助!我不明白这一点。当我尝试使用len()测量python 2.7中列表的长度时,得到了错误的结果。

以下是代码:

case:3

这是输出:

    if len(fields) > 0:
        fields_split = []

        for i in fields:
            i = i.split(',')
            fields_split.append(i)

        reindz = len(fields_split)
        print fields
        print reindz

        print fields_split

因此即使拆分调用有效,包含一个和两个元素的列表之间的长度也没有差异......

3 个答案:

答案 0 :(得分:2)

每个拆分字符串,您将结果列表追加到fields_split。因此fields_split将始终具有与fields完全相同的元素数,每个元素都是一个单独的列表对象。这些单独的列表对象将分别包含一个或多个字符串。

如果您希望将所有拆分字符串添加到fields_split而不添加中间列表,请使用list.extend()而不是list.append()

fields_split.extend(i)

现在,每个拆分结果都会直接添加为fields_split中的单独条目,且长度将等于或大于fields的长度。

答案 1 :(得分:1)

根据您的输出

[u'name,description']
1
[[u'name', u'description']]
[u'name,description']
1
...

len()函数返回正确的输出。对于上面的第二个示例,[[u'name', u'description']]的长度为1,因为它是一个2D列表。第一个"维度"是一个清单。这个维度中只有一个。所以它的长度是1.第二个"尺寸的长度" (那个内部列表)是2,因为它有两个项目。

答案 2 :(得分:0)

我想你想要这个..

fields=u'name,description'
if len(fields) > 0:
    fields_split = fields.split(',')
    reindz = len(fields_split)
    print fields
    print reindz
    print fields_split

结果:

name,description
2
[u'name', u'description']