ここで知っている重要なことは、あなたが他の関数に(または、リスト内の)引数として関数を渡すことができるということです。この問題が解決しやすくなることを理解したら、
あなたはリスト内包する場合:ゼロによる除算が正常に発生したであろう「None」を含まない
from operator import add,sub,mul,div
funcs = [add,sub,mul,div]
die = [1,2,3,4,5,6]
results = [f(x,y) if y != 0 else None for x in die for y in [g(z,w) for z in die for w in die for g in funcs] for f in funcs]
注意を。
これを関数に分割すると、より明確になります。数値と操作リストの2つのリストを取り、すべての結果を返します。
def results(funcs, xs, ys):
out = []
for f in funcs:
for x in xs:
for y in ys:
try:
out.append(f(x,y))
except ZeroDivisionError:
pass
return out
これはゼロ除算が発生した場合は何もありません。すべての結果を得るには、results(funcs,die,results(funcs,die,die))
のようにしてください。
これらはどちらも結果に重複がありますので、実際に何をしたいのかによってはlist
の代わりにset
が必要な場合があります。
また、ちょうどそれを考え、しかし、あなたが行うことを計画しているものに応じてあなたの代わりに発電返すようにresults
を得ることができる:あなたがだけが本当に大きな結果セットを作業している場合は
def results(funcs, xs, ys):
for f in funcs:
for x in xs:
for y in ys:
try:
yield f(x,y)
except ZeroDivisionError:
pass
をそれらを1つずつ見たいと思っています。これはリスト全体を構築するよりも良い選択肢です。
あなた自身をより明確に表現してください。あなたは何を達成したいですか?変数はどのようにいくつかの操作に等しいでしょうか?それは実際にはどういう意味ですか? – Marcin
私はリストの理解のようなものが必要だと思う、私はちょうど数字の代わりに操作でそれを行う方法を知らない。 – ritchie3237