2016-07-01 50 views
-3

幫助!我不明白這一點。當我嘗試用len()測量python 2.7中的列表長度時,我得到了錯誤的結果。用len()測量列表的長度給出錯誤結果

下面的代碼:

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 

這裏的輸出:

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

因此,即使分裂調用工作有長度包含一個列表和兩個元素之間沒有差異...

+1

您的列表包含在它一個逗號,乍一看字符串。另外,我認爲問題在於你的行'i = i.split()'。它可能會弄亂循環 – Jeremy

+4

您的列表中只有一個項目,它是另外兩個項目的列表。 – Lafexlos

+0

看看每個數字後的第一行 - 這是print fields_split的輸出,它包含兩個字符串[[u'name',u'description']]對不對?這就是問題所在...... – treakec

回答

2

每個拆分字符串,你是追加結果列表到fields_split。因此fields_split將始終具有與fields具有完全相同數量的元素,每個元素都有一個單獨的列表對象。那些單獨的列表對象將分別具有一個或多個字符串。

,如果你想全部的分割字符串被添加到fields_split沒有中間列表,使用list.extend()而不是list.append()

fields_split.extend(i) 

現在每個分割結果直接添加爲一個單獨的條目在fields_split,和長度將等於或大於fields的長度。

1

根據您的輸出

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

len()函數返回正確的輸出。對於上面的第二個示例,[[u'name', u'description']]的長度爲1,因爲它是一個2D列表。第一個「維度」是一個列表。這個維度中只有1個。所以這個長度是1.第二個「維度」(內部列表)的長度是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']