2015-04-24 3 views
1

У меня есть исходный список, содержимое которого определяется в другой функции, и я хочу добавить числа 0 и 5 в список, чтобы сделать расширенный список, без искажая оригинал. В этом приложении я знаю, что 0 и 5 никогда не будут частью исходного списка, поэтому меня не интересует дублирование. И меня тоже не интересует порядок или элементы.Python: расширение результата из функции встроенного списка()

  1. По причинам, изложенным в другой вопрос, следующий не работает, потому что она развращает первоначальный список:

    >>> orig = [1,6] 
    >>> extended = orig 
    >>> extended.extend([0,5]) 
    >>> extended 
    [1, 6, 0, 5] 
    >>> orig 
    [1, 6, 0, 5] 
    
  2. Одним из предложенных решений является использование встроенной в списке функций() , Это приводит к желаемому результату:

    >>> orig = [1,6] 
    >>> extended = list(orig) 
    >>> extended.extend([0,5]) 
    >>> extended 
    [1, 6, 0, 5] 
    >>> orig 
    [1, 6] 
    
  3. Затем я попытался объединить 2-й и 3-й линии 2. Это дает результат «None», и только если вы распечатать его.

    >>> orig = [1,6] 
    >>> extended = list(orig).extend([0,5]) 
    >>> extended 
    >>> print extended 
    None 
    
  4. То, что я в конечном итоге кодируются, который аккуратнее, чем любая из предыдущих попыток, это, с помощью конкатенации.

    >>> orig = [1,6] 
    >>> extended = orig + [0,5] 
    >>> extended 
    [1, 6, 0, 5] 
    >>> orig 
    [1, 6] 
    

Но мой вопрос, почему не будет пример 3 работы? Это выглядит разумно (для меня), и оно не возвращает ошибку. Он просто производит «Нет».

Я использую Python 2.7.8.

ответ

1

extend операция Inplace, как list.sortlist.append, это влияет на первоначальный список. Все эти методы, потому что они не возвращают никакого значения, возвращают None, поэтому вы просто видите возвращаемое значение расширения, когда вы extended = list(orig).extend([0,5]).

In [6]: l = [1,2,3] 
In [7]: e = l.extend([4,5])  
In [8]: print e 
None 
In [9]: l = [1,2,3] 
In [10]: a = l.append(6)  
In [11]: print a 
None