問題は、あなたがbar
個人代わりfoo
Sのリストの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
のリスト内でマップを実行して終了する
[mcve]に完全なトレースバックを付けてください。 – jonrsharpe
これは非常に簡単です: 'foo'はイテレータではありません。 –
さて、バーをイテレータにする方法はありますか? –