将重复项添加到列表中

时间:2015-08-07 05:58:46

标签: python list

我正在尝试将列表的最后一项添加到我的代码列表中:

def dup_last(data):
    data.append([-1])
    return data

并且要求该功能是:

item = dup_last([1,2,3])
print(item)

但我希望我的输出只在一组括号内:

[1, 2, 3, 3]

3 个答案:

答案 0 :(得分:3)

data.append([-1])

在这里,您要附加[-1],一个元素为-1的列表,将其更改为:

data.append(data[-1])

答案 1 :(得分:2)

除了其他答案之外,我还建议在处理列表时使用切片表示法[:]以防止在没有项目的情况下出现list index out of range错误:

def dup_last(data):
    data.append(data[-1])
    return data

如果IndexError为空列表,则上述函数将引发data

>>> print dup_last([])
----> 2     data.append(data[-1])
      3     return data
      4
IndexError: list index out of range

按照以下方式更新功能时,不再出现这种错误:

def dup_last(data):
    data.extend(data[-1:])
    return data
>>> print dup_last([])
[]
>>> print dup_last([1])
[1, 1]
>>> print dup_last([1, 2])
[1, 2, 2]

SO question中有一个很好的解释,说明切片在Python中的工作原理。

答案 2 :(得分:1)

你需要做data.append(data[-1]); data.append([-1])会附加一个值,该值只包含-1,因此您的结果将为[1, 2, 3, [-1]]

请注意,这将会就地修改列表,因此无论您传入哪个列表,最后一个元素都会重复,而不仅仅是您获得的列表(尽管它们可能是相同的列表)。

我不会为此使用函数;只需data.append(data[-1])代替data = dup_last(data),甚至dup_last(data)。此外,如果您正在使用列表文字,最好只手动添加副本; data = [1, 2, 3, 3] vs data = dup_last([1, 2, 3])或类似。