Python найти размер каждого подсписка в списке - PullRequest
0 голосов
/ 30 января 2020

У меня есть большой список чисел с плавающей точкой и целых чисел, как указано ниже. Я хочу найти длину каждого подсписка, пренебрегая пустыми или одиночными элементами.

big_list = [[137.83,81.80,198.56],0.0,[200.37,151.55,165.26, 211.84],
 0.0,[1,2,3],4,[5,6,0,5,7,8],0,[2,1,4,5],[9,1,-2]]

Мой текущий код:

list_len = []
for i in big_list: 
     list_len.append(len(i))

Текущий результат:

TypeError: object of type 'numpy.float64' has no len() 

Ожидаемый результат:

list_len = [3,4,3,6,4,3] # list_len should neglect elements like 0, 4 in big_list. 

Ответы [ 5 ]

2 голосов
/ 30 января 2020

Я бы go для:

big_list = [(137.83,81.80,198.56),0.0,np.array([200.37,151.55,165.26, 211.84]),
 0.0,[1,2,3],4,[5,6,0,5,7,8],0,[2,1,4,5],[9,1,-2]]

list_len = [len(x) for x in big_list if hasattr(x, '__len__') and len(x)>0]

, который также работает с numpy массивами и кортежами

1 голос
/ 30 января 2020

Вы можете использовать сжатый список с операторами if-else:

list_len = [len(x) for x in big_list if isinstance(x,list)]
1 голос
/ 30 января 2020
list(map(len, filter(lambda x: isinstance(x, list), big_list)))
1 голос
/ 30 января 2020
res = [len(l) for l in big_list if isinstance(l, list) and len(l)> 0]
1 голос
/ 30 января 2020

Использовать понимание списка с проверкой типа списка следующим образом:

big_list = [[137.83,81.80,198.56],0.0,[200.37,151.55,165.26, 211.84],
 0.0,[1,2,3],4,[5,6,0,5,7,8],0,[2,1,4,5],[9,1,-2]]

lengths = [
    len(sub_list) for sub_list in big_list if isinstance(sub_list, list)
]
print(lengths)

>>> [3, 4, 3, 6, 4, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...