2015-12-17 2 views
1

Я пытаюсь написать функцию в Python, который принимает список х, имеет нулевой индекс п и другое значение Num, а затем присваивает это значение в этой позиции:приписывание Списка в Python - не вставляя

I понял, сегодня утром, что мы не можем сделать прямое назначение, как мы можем в случае массива в некоторых других языках программирования, как

x=[] //an empty array 
x[0]="some value" 

Так я искал альтернативу и нашел функцию вставки для списков, которые требуются 2 аргументы и значения вставки в указанной позиции, например

>>> x=[0] 
>>> x.insert(123,"as") 
>>> x 
[0, 'as'] 
>>> x[0] 
0 
>>> x[1] 
'as' 
>>> x.insert(0,1) 
>>> x 
[1, 0, 'as'] 
>>> len(x) 
3 
>>> x.insert(4,"dfsdf") 
>>> x 
[1, 0, 'as', 'dfsdf'] 
>>> x.insert(4,"dfsdf") 
>>> x 
[1, 0, 'as', 'dfsdf', 'dfsdf'] 

Проблема с этой функцией является то, что если этот элемент уже присутствует в списке, она создает дубликат - то, что не происходит с

x[0]="some -value" 

//if the value is not present it appends the value otherwise it overwrites the value at x[0] 

Так что я написал еще одну функцию InsertAt, которая будет проверяться данный список - если значение уже присутствует в этой позиции, то, если оно не будет вставлено, оно вернет тот же список. Вот он идет:

def insertAt(x,n,num): 
    if n>=len(x): 
    return x.insert(len(x),num) 
    elif n<len(x) and x[n] != num: 
    return x.insert(n,num) 
    else: 
    return x 

Это довольно само explanatory- кроме того, что она всегда возвращает меня None - почему он не возвращает действительное значение ??

+0

'' вернуть x'' вместо '' x.insert (Len (х), кол-во) '' и '' x.insert (n, num) '' после вставки. – Riyaz

+0

Почему вы используете 'return' при работе со списками? Вы редактируете исходный список в этом случае, вам не нужно его возвращать. – tglaria

+0

прав, я понял. возврат будет работать в исходном списке. – Prabhas

ответ

0

Попробуйте это, если вы хотите вернуть измененный список.

def insertAt(x,n,num): 
    if n>=len(x): 
    x.insert(len(x),num) 
    return x 
    elif n<len(x) and x[n] != num: 
    x.insert(n,num) 
    return x 
    else: 
    return x 
0

Если вы хотите получить копию списка, почему бы вам не попробовать это?

def insertAt(l, n, num): 
    if len(l)<n or l[n] != num: 
     return l[:n]+[num]+l[n:] 
    return l 
0
x=[] //an empty array 
x[0]="some value" 

не будет работать. Здесь в первом выражении не выделяется память. И тогда вы пытаетесь присвоить что-то нераспределенной памяти. Как это возможно? Если вы определили список, например,

x = [0]*10 

, а затем попробуйте назначить напрямую, он будет работать. x[2] = 2

Это должно сработать. В вашем случае, если вы хотите сохранить строку в списке символов, вы можете сделать что-то вроде этого,

x = list("some value") 
print x //['s', 'o', 'm', 'e', ' ', 'v', 'a', 'l', 'u', 'e'] 
Смежные вопросы