python中的直接列表赋值 - 不插入

时间:2015-12-17 12:30:17

标签: python algorithm list insert

我正在尝试在python中编写一个函数,它接受一个列表x,取一个基于零的索引n和另一个值num,然后在该位置指定该值:

我今天早上想到,我们不能像其他一些编程语言中的数组一样直接进行分配,例如

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

所以我搜索了一个替代方案并找到了list的insert函数,它接受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,它将检查一个给定的列表 - 如果该值已经存在于该位置n-如果不存在它将插入否则它将返回相同的列表。在这里:

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

这是非常自我解释 - 除了它总是返回我没有 - 为什么它没有返回有效值?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您想要一份清单副本,为什么不试试?

def insertAt(l, n, num):
    if len(l)<n or l[n] != num:
       return l[:n]+[num]+l[n:]
    return l

答案 2 :(得分:0)

UITableViewCell

没有工作。这里,第一个语句没有分配内存。然后你试图为未分配的内存分配一些东西。这怎么可能?如果您将列表定义为,

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

然后尝试直接分配,它会工作。 x = [0]*10

这应该有效。在您的情况下,如果您想将字符串存储为字符列表,您可以执行以下操作,

x[2] = 2