我有以下代码:
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
任何想法? 感谢..
答案 0 :(得分: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
答案 1 :(得分: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)
答案 2 :(得分: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
>>>
答案 3 :(得分:0)
您可以驱动一个跟踪其实例的子类:
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