Python:在洗牌后删除实例属性

时间:2013-02-19 04:20:18

标签: python class attributes overloading

我遇到了numpy.random.shuffle函数的奇怪行为问题。 我将属性添加到实例中,但是在重排后它会被删除。

以下是说明问题的代码:

#I'm making a class of time series.
class TimeSeries(object):
    def __init__(self, data):
        self.data = data
        self.num_points = len(self.data)

    def __getitem__(self, key):
        return self.data[key]

    def __len__(self):
        return self.num_points

dataset = [TimeSeries(numpy.random.random((10,3))) for _ in range(100)]
#Add new attribute
for ts in dataset:
    ts.weight = 1

dataset[0].weight  #returns 1
numpy.random.shuffle(dataset)
dataset[0].weight  #'numpy.ndarray' object has no attribute 'weight'

我想保留权重属性,但在随机播放后删除。 我做了一些试验。 我所拥有的是:

  • 如果数据集很小,则不会发生此问题。 (例如,范围(100)>>范围(3))
  • ids在洗牌后发生变化。
  • 如果没有实现getitem,len方法,则问题不会发生。

随机播放功能发生了什么? 这是一个错误吗?我使用的功能是错误的吗?

1 个答案:

答案 0 :(得分:0)

如果您只是想要随机播放主列表,可以使用

import random
random.shuffle(dataset)