1

属性値を含むリスト (または numpy 配列) をオブジェクトのリストに挿入するにはどうすればよいですか (以下を参照)。

class myClass(object):
    def __init__(self, attr):
        self.attr = attr
        self.other = None

objs = []
for i in range(10):
        objs.append(myClass(i))

attrs = [o.attr for o in objs]
print attrs
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[o.attr for o in objs] = range(10)
#SyntaxError: can't assign to list comprehension

これは、 python でオブジェクトのリストから属性のリストを抽出する逆の問題です。

4

2 に答える 2

3

私はこのようなことをします:

for i, o in enumerate(objs):
    o.attr = i

enumerate(objs)のようなものなzip(range(len(objs)), objs)ので、実際に別のシーケンスから値を取得したい場合は、次のことができます。

for i, o in zip(sequence, objs):
    o.attr = i

効率を高めるために、 itertools.izip も使用できます。

于 2013-07-04T10:42:06.670 に答える
1

obj.__setattr__()リスト内包表記内で使用することもできます:

[o.__setattr__('attr',v) for o,v in zip(objs,range(10)[::-1])]
print [o.attr for o in objs]
#[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
于 2013-07-04T10:56:03.067 に答える