12

我有一个 python 集合 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方法可以做到这一点,更聪明,更易读?

提前致谢。

4

1 回答 1

27

集合是无序的,因此“第三个”元素实际上没有任何意义。这将删除任意元素。

如果这是您想要做的,您可以简单地执行以下操作:

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({"dog", "cat", "elephant"})
['elephant', 'dog', 'cat']
>>> list({1, 2, 3})
[1, 2, 3]

您可以看到,'3' 是由 set 组成的列表的第三个元素,这只是 CPython 实现的巧合{1, 2, 3}

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

于 2012-05-05T19:47:22.217 回答