2016-07-01 2 views
-3

Помощь! Я этого не понимаю. Когда я пытаюсь измерить длину списка в python 2.7 с len(), я получаю неправильный результат.Измерение длины списка с помощью 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

Посмотрите на первую строку после каждого номера - это результат печати 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'] 
Смежные вопросы