2

次のコードがあります。

from collections import namedtuple

Test = namedtuple('Test', ['number_A', 'number_B'])

test_1 = Test(number_A=1, number_B=2)
test_2 = Test(number_A=3, number_B=4)
test_3 = Test(number_A=5, number_B=6)

私の質問は、すべての名前付きタプルをどのように印刷できるかです。たとえば、次のようになります。

print (Test.number_A)

私は結果としてこのようなものを見たいです:

1
3
5

何か案は?ありがとう..

4

4 に答える 4

8

Martijn Peters はコメントで次のようにアドバイスしています。

番号付き変数は使用しないでください。代わりにリストを使用して、すべての名前付きタプルを保存してください。リストをループして、含まれているすべての名前付きタプルを出力します。

これは次のようになります。

Test = namedtuple('Test', ['number_A', 'number_B'])
tests = []
tests.append(Test(number_A=1, number_B=2))
tests.append(Test(number_A=3, number_B=4))
tests.append(Test(number_A=5, number_B=6))

for test in tests:
    print test.number_A

与えます:

1
3
5
于 2013-08-26T19:04:54.583 に答える
1

インスタンスを追跡するサブクラスを駆動できます。

from collections import namedtuple

_Test = namedtuple('_Test', ['number_A', 'number_B'])

class Test(_Test):
    _instances = []
    def __init__(self, *args, **kwargs):
        self._instances.append(self)
    def __del__(self):
        self._instances.remove(self)
    @classmethod
    def all_instances(cls, attribute):
        for inst in cls._instances:
            yield getattr(inst, attribute)

test_1 = Test(number_A=1, number_B=2)
test_2 = Test(number_A=3, number_B=4)
test_3 = Test(number_A=5, number_B=6)

for value in Test.all_instances('number_A'):
    print value

出力:

1
3
5
于 2013-08-26T19:26:33.357 に答える
0

次に例を示します。

import collections

#Create a namedtuple class with names "a" "b" "c"
Row = collections.namedtuple("Row", ["a", "b", "c"], verbose=False, rename=False)   

row = Row(a=1,b=2,c=3) #Make a namedtuple from the Row class we created

print (row)    #Prints: Row(a=1, b=2, c=3)
print (row.a)  #Prints: 1
print (row[0]) #Prints: 1

row = Row._make([2, 3, 4]) #Make a namedtuple from a list of values

print (row)   #Prints: Row(a=2, b=3, c=4)

...from - Python の「名前付きタプル」とは?

于 2013-08-26T19:06:57.160 に答える
0

これにより、次の方法が示されます。

>>> from collections import namedtuple
>>> Test = namedtuple('Test', ['number_A', 'number_B'])
>>> test_1 = Test(number_A=1, number_B=2)
>>> test_2 = Test(number_A=3, number_B=4)
>>> test_3 = Test(number_A=5, number_B=6)
>>> lis = [x.number_A for x in (test_1, test_2, test_3)]
>>> lis
[1, 3, 5]
>>> print "\n".join(map(str, lis))
1
3
5
>>>

ただし、実際には、番号付き変数の代わりにリストを使用することをお勧めします。

>>> from collections import namedtuple
>>> Test = namedtuple('Test', ['number_A', 'number_B'])
>>> lis = []
>>> lis.append(Test(number_A=1, number_B=2))
>>> lis.append(Test(number_A=3, number_B=4))
>>> lis.append(Test(number_A=5, number_B=6))
>>> l = [x.number_A for x in lis]
>>> l
[1, 3, 5]
>>> print "\n".join(map(str, l))
1
3
5
>>>
于 2013-08-26T19:09:03.300 に答える