Мы можем избежать булевых флагов и счетчиков, если тщательно настроим нашу рекурсию:
def removepairs(numbers):
if not numbers: # base case #1, empty
return numbers
first, *second_on = numbers
if not second_on: # base case #2, one element
return numbers
second, *third_on = second_on
if first == second:
return removepairs(third_on)
result = [first] + removepairs(second_on)
if result == numbers:
return numbers # base case #3, no change!
return removepairs(result)
print(removepairs([1, 2, 3, 3, 2, 1, 5, 6, 7]))
ВЫХОД
> python3 test.py
[5, 6, 7]
>
Развертывание Java все еще глупо и утомительно в 2009. Таким образом, обычная опция состоит в том, чтобы записать этот маленький сценарий. При помещении всех БАНОК в один каталог (скажите, lib\
), можно использовать общий сценарий, который создает путь к классу автоматически (см. эту запись в блоге). Я предлагаю добавить a cd /d %~dp0
вначале к CD в каталог сценария.
У знатока 2 есть плагин, который может собрать Ваше приложение в одном "супер JAR" (mvn assembly:assembly). Это работает, если Вы не используете драйвер DB2 JCC (который содержит "COM.ibm". пакеты, которые преобразовываются в com.ibm.-> ClassNotFoundException).
Последнее решение, если у Вас уже есть МУРАВЕЙ build.xml, который работает, состоит в том, чтобы распаковать все зависимые БАНКИ и создать "супер JAR" самих.
С Муравьем Вы могли сделать что-то вдоль следующего:
Для управления Вашими зависимостями Вы могли пойти с Ivy. Во многом как Знаток это может получить зависимости во время изготовления от того, какой бы ни репозитории Вы настраиваете, включая репозитории Знатока или Ваш собственный частный репозиторий.
Мы нашли, что лучшее решение для управления зависимостью и упаковки состоит в том, чтобы использовать Знатока с плагином блока. Это обеспечивает очень изящное средство для упаковки Вас проекты, наряду со всеми зависимостями во время выполнения и поддержкой сценариев в двоичное распределение. Одно из самых больших преимуществ использования блоков - то, что возможно разделить Ваши проекты на отличные компоненты согласно необходимости. При использовании Интеграции Spring его довольно общее, у Вас были бы отдельные компоненты, которые будут разделены по нескольким машинам. Плагин блока позволяет Вам настраивать это к своим требованиям.
Мы используем Знатока 2 с m2eclipse плагином; довольно хорошие работы. Плагин имеет представление графа зависимостей, покажет конфликты и т.д.
Теперь, если Вы хотите упаковать все свои зависимости в единственную банку, можно проверить Ссылки Банки Банки (никакое ребячество!).
Много Ваших проблем исчезает, если Вы делаете свой исполняемый файл JAR и добавляете декларацию включая ClassPath. У Вас действительно есть к ZIP JAR и его зависимости вместе, к сожалению, но Ваши проблемы ПУТИ К КЛАССУ заботятся о.
Что относительно того, чтобы создать пакет OSGi? Я еще не изучил его сам, но это, как предполагается, следующая вещь для упаковочных приложений Java. Это используется в серверах приложений как dm Сервер Spring. Возможно, это может помочь Вам также.
Можно использовать средство запуска, которое устанавливает путь к классу правильно. Затем у Вас будет намного больше гибкости для упаковки БАНОК. Вы могли легко поместить их всех в каталог, который является намного более чистым, чем создание "побочной" ueber банки...
Одно из такого средства запуска является средством запуска свободного городского населения.
Вся эта любовь Знатока и никто упоминают Ivy?О, Боже!
Ну, здесь Ant Ivy и здесь сравнение с Maven2. Смотрите на него также прежде, чем идти почти со всеми, предлагает.
Плагин maven-assembly-может быть не лучшим выбором. Вы должны взглянуть на плагин onejar-maven, как описано здесь:
http://blog.jayway.com/2009/03/22/executable-jar-with-onejar-maven-plugin/
Это позволяет всем вашим банкам зависимостей оставаться банками, а ваш код находится в своем собственном банке. Все эти банки помещены в большую банку, которая становится исполняемой.
В моем сценарии сборки МУРАВЬЯ я генерирую *.bat и сценарии запуска *.sh со списком БАНОК, динамично созданных во время изготовления на основе содержания dir lib сборки.
Например, для создания списка банок с соответствующими разделителями:
<path id="jar-classpath">
<fileset dir="${build.war.dir}/WEB-INF/lib">
<include name="**/*.jar" />
</fileset>
</path>
<pathconvert refid="jar-classpath" targetos="unix" property="exec.classpath.unix">
<map from="${build.war.dir}\WEB-INF\lib\" to="../lib/"/>
</pathconvert>
<pathconvert refid="jar-classpath" targetos="windows" property="exec.classpath.windows">
<map from="${build.war.dir}\WEB-INF\lib\" to="../lib/"/>
</pathconvert>
Можно затем использовать ${exec.classpath.unix}
и ${exec.classpath.windows}
значения в сценариях вызова Java.