替换特定集合元素的pythonic方法是什么?

时间:2012-05-05 19:45:56

标签: python

我有一个python set set([1,2,3])并且总是想用另一个值替换该组的第三个元素。

可以像下面这样做:

def change_last_elemnent(data):
    result = []
    for i,j in enumerate(list(data)):
        if i == 2:
            j = 'C'
        result.append(j)
    return set(result)

但是有没有其他pythonic方法可以做到这一点,更聪明,并使其更具可读性?

提前致谢。

1 个答案:

答案 0 :(得分:19)

集合是无序的,因此“第三”元素并不意味着什么。这将删除任意元素。

如果这是你想要做的,你可以简单地做:

data.pop()
data.add(new_value)

如果您希望通过值从设置中删除项目并替换它,您可以执行以下操作:

data.remove(value) #data.discard(value) if you don't care if the item exists.
data.add(new_value)

如果您想保留有序数据,请使用列表并执行:

data[index] = new_value

要显示未订购集合:

>>> list(set(["dog", "cat", "elephant"]))
['elephant', 'dog', 'cat']
>>> list(set([1, 2, 3]))
[1, 2, 3]

你可以看到CPython的实现只是巧合,'3'是从集合[1, 2, 3]制作的列表的第三个元素。

您的示例代码在其他方面也存在严重缺陷。 new_list不存在。在任何时候都不会从列表中删除旧元素,循环遍历列表的行为完全没有意义。显然,由于整个概念存在缺陷,所以这一点都不重要。