itertoolsを利用するための良い問題。
'、'で分割することによって生成されたアイテムのペアのリストをフラット化するようにソリューションを読んでください
list(chain(*(product(*imap(str.split, e)) for e in data)))
そしてここにデモンストレーションがあります
>>> from pprint import PrettyPrinter
>>> pp = PrettyPrinter(indent = 4)
>>> data = [('Date', 'Type', 'Product'),
('2013/03/07', 'Electronic', 'TV, Radio, Microwave'),
('2013/03/07', 'leather', 'Gucci Wallet')]
>>> from itertools import izip, imap, product, chain
>>> data = list(chain(*(product(*imap(str.split, e)) for e in data)))
>>> pp.pprint(data)
[ ('Date', 'Type', 'Product'),
('2013/03/07', 'Electronic', 'TV,'),
('2013/03/07', 'Electronic', 'Radio,'),
('2013/03/07', 'Electronic', 'Microwave'),
('2013/03/07', 'leather', 'Gucci'),
('2013/03/07', 'leather', 'Wallet')]
OPからの更新
data = list(chain(*(product(* imap(str.split('、')、e))for e in fined_data)))、この行を使用してコードをフラット化しましたが、次のエラーが表示されました: "type object *の後の引数は、ジェネレータではなくシーケンスである必要があります」、単純な分割は、スペースや特殊文字を使用してもすべての単語を分割します。助けてください
オプション1:
>>> from operator import methodcaller
>>> list(chain(*(product(*imap(methodcaller("split", ","), e)) for e in data)))
オプション2:
>>> list(chain(*(product(*(s.split(",") for s in e)) for e in data)))