Невозможно подсчитать элементы внутри кортежа внутри списка

#python #python-3.x #networkx #mesa

#python #python-3.x #networkx #mesa

Вопрос:

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

 ties = [(84,40,{'variable1' : 0.11225, 'variable2': -0.2581}),
        (84,4,{'variable1' : -0.18855, 'variable2': -0.6458}), 
        (84,23,{'variable1' : 0.05144, 'variable2': -0.7581})]

ties = list((int(j) for i in ties for j in i))

res = len(ties) 

#alternatively I also tried

from itertools import chain 

res = len(list(map(int, chain.from_iterable(ties))))

  

Вышеуказанное (оба) выдало бы ошибку TypeError: 'int' object is not iterable , и я не понимаю, почему. Мысли?

Заранее спасибо!

*** Редактировать ***

Исправлена синтаксическая ошибка, теперь она работает, спасибо всем за ваши предложения

Комментарии:

1. ties недопустимый Python объект. Не могли бы вы поделиться своим фактическим кодом?

2. Это потому, что ваш i ссылается на 84 в первой итерации. какой int объект, и в python вы не можете выполнять итерации по целым числам.

3. Похоже, что у вас есть опечатки в вашей первой строке, где ties определено. Вам не хватает открывающих скобок для второго и третьего кортежей (перед 84,4 и 84,23 ). Код не может выполняться как есть, пожалуйста, исправьте это.

Ответ №1:

Кортежи не могут быть повторены. Следовательно, вы получаете ошибку при попытке выполнить код. Кроме того, следующий опубликованный вами код выдает синтаксическую ошибку.

 ties = [(84,40,{'variable1' : 0.11225, 'variable2': -0.2581}), 84,4,{'variable1' : -0.18855, 'variable2': -0.6458}), 84,23,{'variable1' : 0.05144, 'variable2': -0.7581})]
  

Похоже, вы пропустили открывающие скобки перед 84,4 и снова перед 84,23.

Попробуйте следующее:

 ties = [(84,40,{'variable1' : 0.11225, 'variable2': -0.2581}), (84,4,{'variable1' : -0.18855, 'variable2': -0.6458}), (84,23,{'variable1' : 0.05144, 'variable2': -0.7581})]

ties_len = list((len(i) for i in ties))
  

Комментарии:

1. Исправлена синтаксическая ошибка и применено ваше решение. Спасибо!

Ответ №2:

Понимание списка, отфильтрованное isinstance , в предположении, что ties на самом деле является следующим объектом (поскольку синтаксис OP является недопустимым)

 ties = [
    (84,40,{'variable1' : 0.11225, 'variable2': -0.2581}), 
    (84,4,{'variable1' : -0.18855, 'variable2': -0.6458}), 
    (84,23,{'variable1' : 0.05144, 'variable2': -0.7581})
]

count_tuples = len([o for o in ties if isinstance(o, tuple)])
  

С принтами: 3

Ответ №3:

Если вы просто хотите узнать количество кортежей внутри списка, вам нужно только это:

 ties = [
    (84,40,{'variable1' : 0.11225, 'variable2': -0.2581}), 
    (84,4,{'variable1' : -0.18855, 'variable2': -0.6458}), 
    (84,23,{'variable1' : 0.05144, 'variable2': -0.7581})
]

res = len(ties)
# 3
  

Если вам нужен список с длиной кортежей внутри списка, вам нужно использовать:

 res = [len(tie) for tie in ties]
# [3, 3, 3]