2013-02-28 61 views
2

我想知道是否有更多pythonic根据(默认)索引将元素添加到列表中的方式。如果指数超出范围,会发生什么情况。 (我来自Java)将项目以Python方式添加到列表中

self.releases = [] 

def add_release(self, release, index=-1): 

    list_length = len(self.releases) 

    if index < 0: 
     # add element at the end of the list 
     self.releases.append(release) 
    elif index < list_length: 
     # add element at the given index 
     self.releases.insert(index, release) 
    else: 
     # index is out of bound ~ what will happen when an element will be added at this index? 
     pass 

在此先感谢。

+1

'append'接受'1'参数并在末尾添加它。也许你想''插入'。 – 2013-02-28 14:14:53

+0

当然,你是对的! – user937284 2013-02-28 14:23:04

回答

6

保留指数-1,并捕捉异常,而不是:

def add_release(self, release, index=-1): 
    self.releases.insert(index, release) 

当您使用.insert()具有负折射率,该项目被插入相对于列表的长度。超越界限指数回到界限;插入超出的长度与追加相同,插入0之前的插入代替0。

+0

谢谢!这正是我所期待的。 – user937284 2013-02-28 14:28:01

+1

在什么情况下会插入引发IndexError?我正在玩python 3.3,大量的负面索引添加到列表的开头。大的积极索引增加了结尾。范围内的索引(1,len(list)-1)添加到中间。我无法通过插入来获取IndexError。 – Octipi 2013-02-28 14:39:59

+0

@EricRoper:啊,当然,你是对的。它永远不会升起。而有趣的是*我知道* ...更正。 – 2013-02-28 14:41:33

0

尝试看看插入方法

a=[] 
a.insert(index, value) 

如果你确定你是不是出界的,你也可以

a[index] = value 

注意,它将覆盖在给定索引处的值如果存在任何

+1

'a [index] = value' *替换*该索引处的值。它*不等于插入。 – 2013-02-28 14:16:37

+0

我已经添加了关于该 – 2013-02-28 14:17:53

+1

的注释但函数名称是'add_release()',那么为什么要覆盖现有的值? – 2013-02-28 14:18:58

2

List.append()只有一个参数 - 值为附加到列表中。如果要插入任意位置,则需要使用List.insert(),它将超出范围的位置参数视为对append的调用。