Элементы блока CSS на строке

Эта строка является источником проблем:

solnSet.append(nums[0])

При добавлении к list ничего не возвращается (поэтому по умолчанию возвращается None). Когда ваша функция выполняет рекурсию для allSum(solnSet.append(nums[0]), nums[1:], target), , вы фактически передаете None в первый аргумент .

Это вызовет исключение 'NoneType' object is not iterable, когда ваш код запускает map(lambda x: tuple(x), solnSet) или sum(solnSet).


Чтобы решить эту проблему, вы можете сделать

allSum(solnSet + [nums[0]], nums[1:], target)

(это создает новый список и не изменяет оригинал)

[1118 ] или

solnSet.append(nums[0])
allSum(solnSet, nums[1:], target)

(но этот действительно изменяет оригинал).

8
задан Dan Monego 21 November 2008 в 18:52
поделиться

5 ответов

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

Расположение профессионалов:

  • очень точное расположение относительно следующего предка отметило как родственника положения - допускает большую гибкость
  • позволяет, чтобы элементы были в другом порядке визуально, чем они находятся в DOM

Расположение недостатков:

  • Тяжелее для выстраивания в линию с другими элементами, так как расположенный элемент больше не находится в потоке документации и также из-за уровня требуемой точности.
  • Другие элементы игнорируют абсолютно расположенный элемент, что означает, что у Вас могло быть потенциальное перекрытие, если Вы не объясняете минимальный и максимальный размер расположенного элемента
  • тяжелее для реализации нижнего колонтитула, если Вы используете абсолютное расположение для своих столбцов.

Профессионалы плавающие:

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

Недостатки плавающие:

  • Много ловушек для менее опытных с разметками плавающими, которые могут привести ко многим вопросам, спрашиваемым относительно ТАК :)

Относительно clear:both элемента, который упомянул Sebastian, существует простой путь вокруг этого. Позволяет говорят, что у Вас есть контейнерное отделение и 2 пущенных в ход отделения внутри.

HTML:

<div id="con">
    <div class="float"></div>
    <div class="float"></div>
</div>

CSS:

#con { background:#f0f; }
.float { float:left; width:100px; height:100px; background:#0ff; }

если бы необходимо было выполнить этот код, то Вы заметили бы, что контейнерное отделение (пурпурного цвета) является только единственным пикселем высоко, тогда как пущенные в ход отделения были корректны - который является проблемой, которую упомянул Sebastian. Теперь Вы могли послушать его совет и добавить br или пустить в ход контейнер, который не будет очень семантическим - таким образом, вот будет немного более изящное решение. Просто добавьте overflow:hidden; контейнерному отделению как так:

#con { background:#f0f; overflow:hidden; }

Теперь Ваш контейнер должен перенести пущенные в ход отделения правильно.

4
ответ дан 5 December 2019 в 11:28
поделиться

Ну, если вас не слишком заботят старые браузеры (я смотрю на вас, IE6), то лучше путь здесь заключается в

display:inline-block;

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

9
ответ дан 5 December 2019 в 11:28
поделиться

Родительский контейнер не простирается с ними, если ему также не присваивают тег плавающий или существует br с clear:both; внизу.

Я пошел бы с float:left вместо расположения. Браузер делает все выравнивание, когда один объект простирается. Таким образом, существует меньше, чтобы Вы заботились о.

1
ответ дан 5 December 2019 в 11:28
поделиться

Я думаю, что явно не расположил бы элементы, а скорее дал бы браузеру команду использовать встроенное расположение для элементов с помощью display:inline и позволять браузеру обработать расположение.

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

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

1
ответ дан 5 December 2019 в 11:28
поделиться

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

0
ответ дан 5 December 2019 в 11:28
поделиться