😀
Pythonリストの要素を条件で複数のリストに分類する
最初に
リストに格納されている値、あるいはオブジェクトをいくつかのグループに分割したいことはありませんか?
0から99までの整数を奇数と偶数に分ける
内包表記を使って書くと・・・
けど、これって分類してるのではなくて生成してますね。
if __name__ == '__main__':
nums = list(range(100))
odd = [x for x in nums if x & 1]
even = [x for x in nums if not x & 1]
print(odd, even)
for 文を使って書く・・・
if __name__ == '__main__':
nums = list(range(100))
odd = []
even = []
for x in nums:
(odd if x & 1 else even).append(x)
print(odd, even)
長い長い・・・。かっこよくない。
reduce を使う
reduce に初期値として dict を与えて、リストの各要素の値に応じてリストに追加していく.
このやり方であれば、1つのループで実現できるし、リストの要素がオブジェクトで、そのオブジェクトによって複数に分類したい場合でも応用できる。
def classification(acc, num):
if num & 1:
acc['odd'].append(num)
else:
acc['even'].append(num)
return acc
if __name__ == '__main__':
nums = list(range(100))
from functools import reduce
result = reduce(
classification,
nums,
{
'odd': [],
'even': []
}
)
print(result['odd'], result['even'])
Discussion