Хобрук: Ваш путь к мастерству в программировании

python 3, разница в двух конструкциях кортежей

У меня есть скрипт для выполнения некоторых математических вычислений, где я использую словари для представления многочленов. Первоначально мой код начинался так:

p = {}
p[(0,0,0)] = 1

Затем, чтобы обобщить, я заменил вторую команду на эту:

p[tuple(numpy.zeros((3,),dtype=int))] = 1

Чего я не понимаю, так это того, почему это единственное изменение влияет на результат программы. Чем они отличаются?


  • Проверил, разницы нет... 12.06.2017
  • это единственное изменение влияет на результат программы, вам нужно объяснить это предложение. 12.06.2017
  • Я так и думал, но после внесения изменений я получаю другие результаты. Позвольте мне посмотреть, смогу ли я получить меньший сценарий для получения такого же различия. 12.06.2017
  • @Dunham: tuple(numpy.zeros((3,),dtype=int)) == (0,0,0) это True. Это означает, что они эквивалентны. За исключением ссылочного равенства, оба должны работать точно так же. 12.06.2017
  • Кроме того, возможно, более элегантный способ сделать это — использовать d[(0,)*3]. Более компактный... 12.06.2017
  • p[(0,)*3] дает тот же результат, что и оригинал. Это то, что мне нужно. Однако мне все еще любопытно, почему версия numpy не работает. 12.06.2017
  • Не описывая, что именно не работает, вы можете видеть, как любой, кто читает ваш вопрос, с трудом понимает его, верно? Посмотрите, сможете ли вы создать минимальный пример, отображающий ошибочное поведение, чтобы удовлетворить ваше любопытство. 12.06.2017
  • @JimFasarakisHilliard Первоначально я спрашивал, есть ли какая-то фундаментальная разница между двумя конструкциями, о которой я не знал. Похоже, что это неочевидно, поэтому я пытаюсь воспроизвести ошибку на небольшом скрипте, как я упоминал в предыдущем комментарии. 12.06.2017
  • @Dunham Разница в том, что версия numpy создает кортеж из numpy.int64 вместо обычных Python int; это вряд ли будет иметь значение, но может в некоторых случаях, например. stackoverflow.com/questions/44302946/ 12.06.2017
  • @Chris_Rands Не могли бы вы опубликовать свой комментарий в качестве ответа? На самом деле это была проблема. Тип numpy.int64 приводил к числовым ошибкам, которые усугублялись на более поздних этапах кода. 12.06.2017

Ответы:


1

Как я уже сказал в своем комментарии, разница в том, что версия numpy создает tuple из numpy.int64 вместо обычных Python int:

>>> import numpy
>>> t1 = (0,0,0)
>>> type(t1[0])
<class 'int'>
>>> t2 = tuple(numpy.zeros((3,),dtype=int))
>>> type(t2[0])
<class 'numpy.int64'>

Это вряд ли будет иметь значение, но может в некоторых случаях, например, с несколько itertools аргументов. С этим тоже связана ошибка, поэтому следите за этим.

12.06.2017
Новые материалы

Как получить 5-звездочные отзывы на Upwork
Как получить 5-звездочные отзывы на Upwork Фрилансеры и работники гиг-экономики больше, чем когда-либо, зависят от отзывов клиентов, чтобы влиять на решения людей работать с ними. После многих..

Новые темы: семинары по основам программирования, неделя 2
(Семинары, указанные ниже, в настоящее время закрыты. Чтобы узнать о новейших семинарах, пожалуйста, ознакомьтесь с последней записью в блоге ) Добро пожаловать на вторую неделю наших..

Рекомендательные системы в науке о данных
Системы рекомендаций являются неотъемлемой частью современной науки о данных. Это алгоритмы, предназначенные для прогнозирования того, что может понравиться или заинтересовать пользователя, на..

Составление схемы курса Udemy Javascript
Составление схемы курса Udemy Javascript Я пишу код с тех пор, как четыре года назад окончил колледж. Я внес свой вклад в сообщество, читая лекции, отвечая на stackoverflow и работая в..

Статическая типизация в TypeScript: основы Typescript
Понимание статической типизации TypeScript, расширенный набор JavaScript, был разработан Microsoft в 2012 году для устранения некоторых ограничений JavaScript. Одним из его основных предложений..

Как использовать SAAS на благо вашего бизнеса
В деловом мире SAAS (программное обеспечение как услуга) становится все более популярным. И неудивительно, почему — SAAS предоставляет ряд преимуществ для предприятий любого размера. Вот лишь..

Приложения случайного блуждания, часть 1 (статистика + машинное обучение)
Смещенное случайное блуждание при динамической перколяции (arXiv) Автор: Себастьян Андрес , Нина Гантерт , Доминик Шмид , Перла Сузи Аннотация: мы изучаем смещенные случайные..