的问题是,你给bar
个人foo
代替foo
秒的列表,以及放置打印揭示问题
from operator import attrgetter
class foo:
def __init__(self, a, b):
self.a = a
self.b = b
def __repr__(self):
return "{0.__class__.__name__}({0.a},{0.b})".format(self)
class bar:
def __init__(self, foos):
print("foos=",foos)
self.foos = sorted(foos, key=attrgetter('a'))
def __repr__(self):
return "{0.__class__.__name__}({0.foos})".format(self)
lofoos = [[foo(1,0), foo(2,0), foo(3,0)], [foo(4,1), foo(5,1), foo(6,1)]]
print("test list of lists of foo")
print(list(map(lambda foos: bar(foos), lofoos)))
print("\n")
print("test list of foo")
print(list(map(lambda foos: bar(foos), lofoos[0])))
输出
test list of lists of foo
foos= [foo(1,0), foo(2,0), foo(3,0)]
foos= [foo(4,1), foo(5,1), foo(6,1)]
[bar([foo(1,0), foo(2,0), foo(3,0)]), bar([foo(4,1), foo(5,1), foo(6,1)])]
test list of foo
foos= foo(1,0)
Traceback (most recent call last):
File "C:\Users\David\Documents\Python Scripts\stackoverflow_test.py", line 24, in <module>
print(list(map(lambda foos: bar(foos), lofoos[0])))
File "C:\Users\David\Documents\Python Scripts\stackoverflow_test.py", line 24, in <lambda>
print(list(map(lambda foos: bar(foos), lofoos[0])))
File "C:\Users\David\Documents\Python Scripts\stackoverflow_test.py", line 15, in __init__
self.foos = sorted(foos, key=attrgetter('a'))
TypeError: 'foo' object is not iterable
>>>
记得什么map(fun,[a,b,c])
呢是生产[fun(a),fun(b),fun(c)]
因此,在代码中的某个地方,你结束的foo
一个列表,而不是的foo
的目录列表做一个地图,请给出[MCVE]与完整的回溯。 – jonrsharpe
这很简单:'foo'不是迭代器。 – 2016-12-30 19:59:45
好的,有没有办法让bar成为迭代器? –