リスト内包表記でリストを作成し、そのcount
メソッドを呼び出しました。icount
代わりに、ジェネレータ式でイテレータを作成し、イテラブルを取る関数を呼び出します。
diffs = (abs(a -b) for a, b in combinations(intList, 2))
print icount(diffs, 2)
元のコードとほぼ同じですが、余分なメモリは使用しません。
もちろんそのicount
関数は存在しませんが、自分で書けるはずです。
def icount(iterable, value):
result = 0
for element in iterable:
if element == value:
result += 1
return result
…または…</p>
def ilen(iterable):
return sum(1 for _ in iterable)
def icount(iterable, value):
filtered = (elem for elem in iterable if elem == value)
return ilen(filtered)
…または…</p>
def icount(iterable, value):
return sum(elem == value for elem in iterable)
…または ( itertools レシピを使用) …</p>
def icount(iterable, value):
return quantify(iterable, lambda elem: elem == value)
必要に応じて、式をicount
関数にマージして、すべてを 1 行で実行すると、Tim Peters の答えが正確に得られます。