2016-06-07 5 views
0

Я пытаюсь создать определенную функцию (без методов list/string): пока что у меня есть код для обновления в данном месте, но я изо всех сил пытаюсь создать код, который может вставить переменную в местоположение списка, и переместить существующие элементы. Я хочу, чтобы на выходе были ['a', 'b', 'c', 'd'] вместо ['a', 'b', 'c', 'e'].Вставить элемент в список, переместить существующие элементы

Обращаем ваше внимание: Это для изучения, я хочу узнать, что я предпочел бы быть направленным в правильном направлении, а не только при условии ответа.

def insert(list1, var, i): 
    counter = 0 
    for i in my_list: 
     if counter == i: 
      my_list[i] = var 
     counter += 1 
    return list1 

list = ['a', 'b', 'd', 'e'] 
func = insert(list, 'c', 2) 

я уже работал над кодом на ночь (извините за столь поздний ответ я был на самолете)

Я пришел с этим кодом, и я думаю, что это работает, несмотря на то, что это немного сырой. может ли кто-нибудь дать какой-либо вклад в отношении того, считают ли они, что это проблема или нет?

def insert(list1, var, i): 
    new_list = [] 
    counter = -1 
    for index in (list1[:-1]): 
     counter += 1 
     new_list.append(index) 
     if counter == (i-1): 
      new_list.append(var) 

    return new_list 

list2= ['a', 'b', 'c', 'd', 'e', 'f', 'h'] 
func = insert(list2, 'g', 6) 
print(func) 
+2

Вы даже не разрешается использовать 'list.append' ? У вас будет интересное время, поскольку я считаю, что список-comp еще не научен? (Я бы предположил, что только «list.insert» выходит за пределы)? –

+0

Вам нужно будет скопировать список, но поскольку вам просто нужен указатель на учебный материал, могу ли я предложить http://www.effbot.org/zone/python-list.htm – user590028

+2

Вы уверены, что не хотите список должен быть '['a', 'b', 'c', 'd', 'e']'? Или вам нужна постоянная длина? – SiHa

ответ

0

Использование нарезку, это довольно легко сделать это без использования каких-либо методов list вообще. Если вы используете Python 3.5+ с additional unpacking generalizations, он даже выглядит:

def insert(list1, var, i): 
    # Reassign all elements at and beyond the insertion point to be the new 
    # value, and all but the last value previously there (so size is unchanged) 
    list1[i:] = var, *list1[i:-1] 

или мутирует аргумент вызывающего абонента на месте плохо, и вы хотите вернуть новое значение:

def insert(list1, var, i): 
    # Unpacking the components sliced as before to a brand new list 
    return [*list1[:i], var, *list1[i:-1]] 

Без распаковки обобщений, это не совсем так хорошо, но все же выполнимо, либо аргумент Mutating:

def insert(list1, var, i): 
    # Uglier without unpacking generalizations 
    list1[i], list1[i+1:] = var, list1[i:-1] 

или новый list конструкционный:

def insert(list1, var, i): 
    # An extra temporary without unpacking generalizations, but not ugly 
    return list1[:i] + [var] + list1[i:-1] 

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

Если вы хотите, решение с использованием только range и/или .append, без нарезки:

def insert(list1, var, i): 
    for idx in range(len(list1)-1, i, -1): 
     list1[idx] = list1[idx-1] 
    list1[i] = var 

или не мутирует:

def insert(list1, var, i): 
    newlist = [] 
    for idx in range(i): 
     newlist.append(list1[idx]) 
    newlist.append(var) 
    for idx in range(i, len(list1)-1): 
     newlist.append(list1[idx]) 
    return newlist 
0
def insert(list1, var, i): 
    new_list = list1[:i] 
    new_list.append(var) 
    new_list.extend(list1[i:]) 
    return new_list 

list = ['a', 'b', 'd', 'e'] 
func = insert(list, 'c', 2) 

взять часть list1 до I. Это называется нарезкой липкости вара на new_list с Append липкостью на остальной части списка с простираться

['a', 'b', 'c', 'd', 'e'] 
+0

мы не можем использовать .extend, поскольку это метод списка, единственным доступным нам методом list является .append, и единственная встроенная функция, которая также может быть использована, - range(). вот почему я застрял до сих пор. – Newerino6525

0

В моем подходе, метод возвращает половину расщепляется список с элементом нужно добавить между ними.

In [15]: list = ['a', 'b', 'd', 'e'] 

In [16]: def insert(lst, var, i): 
    ....:  return lst[:i] + [var] + lst[i:] 
    ....: 

In [17]: insert(list, 'c', 2) 
Out[17]: ['a', 'b', 'c', 'd', 'e'] 

Edit: это по сути то же самое, отправленный @joel goldstick

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