Списки не нарезать правильно

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

foo = print "Hello, World!"

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

Однако вы можете написать программу, которая делает одно и то же на нескольких языках. Это называется полиглот . Вот наша вышеуказанная программа, модифицированная как полиглот на Haskell и Python 2:

main = print "Hello, World!"

Что касается написания кода, который выглядит «странно», как код в вашем примере в Scala, он называется внутренним DSL и на самом деле не редкость.

0
задан 19.01.2019, 17:03

3 ответа

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

Я был так же удивлен этим результатом, как и вы, но за этим стоит логика.

Я думаю, что вы ожидали, можно получить с помощью:

lines[0:4] = [' - ']

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

lines[0:4] = [' - '] * 4
0
ответ дан 07.04.2019, 14:06
  • 1
    @StephenRauch, которым мое предположение было то, что намерение состояло в том, чтобы заменить 4 строковых элемента единственным строковым элементом. – Mark Ransom 19.01.2019, 17:02
  • 2
    @StephenRauch don' t говорят " я сказал Вам so" редактирование, просто сделанное к вопросу, показывает, что Вы действительно корректны. – Mark Ransom 19.01.2019, 17:06
  • 3
    Но он сказал, что хочет ' _ ' несколько раз? И тоном ответа Вы не весело проводите время, так оставит Вас в мире. Аплодисменты. – Stephen Rauch 19.01.2019, 17:07
  • 4
    @StephenRauch все в хорошем развлечении. Спасибо за хранение меня на моих пальцах ног. Надо надеяться, мое заключительное редактирование делает вещи хорошими. – Mark Ransom 19.01.2019, 17:10
  • 5
    @StephenRauch Ваш метод фиксации моего списка работал.Спасибо! Извините за неясность – tarkoon 19.01.2019, 17:11
  • 6
    You' приветствие ре:) – Lightness Races in Orbit 26.01.2019, 05:23

Строка '_' на самом деле является просто массивом символов [' ', '_', ' '].

Таким образом, lines[0:4] = ' _ ' устанавливает первый элемент строк как «», второй - «_», а третий - «». Это объясняет поведение, которое вы наблюдаете.

Если вы пытаетесь сделать первые три элемента списка '_', я бы предложил просто сделать lines[i] = ' _ ' для каждого i, являющегося индексом, который вы хотите заменить этой строкой. Вероятно, есть один способ сделать это, если вы используете библиотечную функцию.

for i in range(4):
     lines[i] = ' _ '
0
ответ дан 07.04.2019, 14:06
  • 1
    Если Вы собираетесь попытаться ответить на неясный вопрос, необходимо идти вперед и ответить на него. Как можно установить первые четыре элемента, равные ' _ '? – Stephen Rauch 19.01.2019, 16:46
  • 2
    @user2779450 Поэтому при высказывании строк [я] Вы означаете перечислять через него тогда? – tarkoon 19.01.2019, 17:10
  • 3
    @tarkoon Да. Я отредактировал свой ответ для включения кодированного примера этого. Ответы выше ravishankar chavare работают также. – user2779450 20.01.2019, 07:29
  • 4
    Привет Alex, это работается для меня, Спасибо... – Ruthran Smart 27.01.2019, 03:37

Если вы хотите заменить Начальный 4 элемент на _

, просто попробуйте

lines = ['0', '1', '2', '3', '4', '5', '6']
for idx,value in enumerate(lines[0:4]):
    lines[idx]="_"
print(lines)

. Если вы хотите однострочное решение, попробуйте это

lines = ['0', '1', '2', '3', '4', '5', '6']
lines=["_" if 0 <= idx <= 3 else v for idx,v in enumerate(lines) ]
print(lines)
0
ответ дан 07.04.2019, 14:06
  • 1
    Да, я поместил бы сессию =" false" в директиву страницы по каждому jsp. Так управляйте созданием сессии своим собственным кодом в любом случае. Кроме того, Вы не должны создавать session2 объект. (Тем более, так как Вы используете встроенное session позже.) Встроенное session переменная, которая создается Платформой JSP, всегда там; это создается Платформой инструкцией HttpSession session = request.getSession( valueFromTheSessionAttributeInPageDirective ); – gsl 30.01.2019, 22:01

Теги

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