#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]