2013-12-18 4 views
2

Мне сложно понять этот фрагмент кода, это упражнение для моего предстоящего экзамена. Помогите!Что он печатает? (Списки)

Язык программирования python 2.7.5. Вопрос в том; Что такое печать?

Я знаю, что ответ [5], но я не понимаю, почему. Более конкретно, что происходит в функции india(), не может следовать за ней, когда она вызывает india(list2, elem).

def india(juliet, kilo): 
    juliet[:] = juliet[1:3] + [kilo] 
    kilo = juliet[1] + 1 

def tilt(l): 
    return l[2:] 

list = [9,8,7,6] 
elem = 5 
list2 = list 
india(list2, elem) 
list = tilt(list2) 
print list 
+1

Используйте отладчик. – RedX

+2

@RedX: Не нужно быть таким невежливым. Отладчик - это более продвинутый инструмент, чем может обрабатывать большинство новичков. –

+0

@MartijnPieters Он проводит курс на питоне, поэтому я думаю, что у них был отладчик, введенный в курс (надеюсь). Если нет, сейчас самое время учиться. – RedX

ответ

5

Вот что происходит шаг за шагом:

  1. juliet[1:3] + [kilo]: ломтик список ввода, принимая второе и третье значения, и сцепить новый список со значением kilo в нем. Результат: [8, 7, 5].
  2. Назначить результат выражения на шаге 1 для всего фрагмента juliet; это заменяет все индексы в список со значениями нового списка, созданного в 1. Результат: объект списка, на который ссылается juliet, теперь имеет значения [8, 7, 5].
  3. Назначить второе значение в новом juliet, плюс 1, до kilo, результатом является то, что kilo отскок до 8.

Последний шаг в противном случае несущественным, только местное kilo имя отскока, оставив оригинальную переменную, передаваемую в india() функции нетронутым. С другой стороны, список, на который ссылается julia, был изменен на месте, что означает, что ссылки list2 и list ссылаются на него и на то же отражение.

Таким образом, когда india() возвращается, list и list2 оба относятся к одному и тому же объекту списка с содержимым [8, 7, 5].

После этого tilt() возвращает кусочек list2, которое было бы новый список объектов, только с последним значением в list2, так list перепривязывается к [5], и это затем печатается.

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

Смежные вопросы