плавание sizeof (3.0) по сравнению с (3.0f)

Вот решение, которое Вы ищете:

>>> foos = [1.0, 2.0, 3.0, 4.0, 5.0]
>>> bars = [1, 2, 3]
>>> [(x, bars) for x in foos]
[(1.0, [1, 2, 3]), (2.0, [1, 2, 3]), (3.0, [1, 2, 3]), (4.0, [1, 2, 3]), (5.0, [
1, 2, 3])]

я рекомендовал бы использовать понимание списка ([(x, bars) for x in foos] часть) по использованию карты, поскольку это избегает издержек вызова функции на каждом повторении (который может быть очень значительным). Если Вы просто соберетесь использовать его в для цикла, то Вы получите лучшие скорости при помощи понимания генератора:

>>> y = ((x, bars) for x in foos)
>>> for z in y:
...     print z
...
(1.0, [1, 2, 3])
(2.0, [1, 2, 3])
(3.0, [1, 2, 3])
(4.0, [1, 2, 3])
(5.0, [1, 2, 3])

различие - то, что понимание генератора , лениво загрузился .

ОБНОВЛЕНИЕ В ответ на этот комментарий:

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

я предполагаю, что это - актуальный вопрос. Существует два решения этого, что я могу думать. Самое эффективное является, вероятно, чем-то вроде этого:

tbars = tuple(bars)
[(x, tbars) for x in foos]

, Так как кортежи неизменны, это будет препятствовать тому, чтобы панели были изменены через результаты этого понимания списка (или понимание генератора, если Вы пойдете тем путем). Если действительно необходимо изменить каждый из результатов, можно сделать это:

from copy import copy
[(x, copy(bars)) for x in foos]

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

11
задан kumar 31 August 2009 в 00:56
поделиться

3 ответа

Потому что 3.0 является двойным. См. Синтаксис C Типы с плавающей запятой .

Константы с плавающей запятой могут быть записано в десятичной системе счисления, например 1.23. Можно использовать научную нотацию, добавив e или E с последующим десятичным знаком. показатель степени, например 1,23e2 (который имеет значение 123). Либо десятичная точка, либо требуется показатель степени (в противном случае число является целочисленной константой). C99 введен шестнадцатеричный константы с плавающей запятой, которые следуют аналогичные правила, за исключением того, что они должны быть с префиксом 0x и используйте p, чтобы указать шестнадцатеричный показатель степени. И десятичные, и шестнадцатеричные константы с плавающей запятой может иметь суффикс f или F для обозначения константа типа float, на l или L, чтобы укажите тип long double или left без суффиксов для константы типа double.

24
ответ дан 3 December 2019 в 01:29
поделиться
  • 3.0f - с плавающей точкой (4 байта)
  • 3.0 - с двойной точностью (8 байтов)

подробнее

10
ответ дан 3 December 2019 в 01:29
поделиться

3.0 - это double , а не float .

double вдвое шире, чем float С.

РЕДАКТИРОВАТЬ : 3.0d есть только в C #

6
ответ дан 3 December 2019 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: