内包表記
# 解答 def lengths(strings): return [len(x) for x in strings] # 解答 def nums(str1): return [int(x) for x in str1.split('.')] # 解答 def var(lst): length = len(lst) mean = sum(lst)/length lst2 = [(x - mean)**2 for x in lst] return sum(lst2)/length # 模範解答 def var(lst): n = len(lst) av = sum(lst)/n return sum([x*x for x in lst])/n - av*av # 入れ子構造 [[x*y for y in range(x+1)] for x in range(4)] # 外側から読む # Out: [[0], [0, 1], [0, 2, 4], [0, 3, 6, 9]] [x*y for x in range(4) for y in range(x+1)] # 左から読む # Out: [0, 0, 1, 0, 2, 4, 0, 3, 6, 9] # 空文字を作らないように境界の処理を工夫 def allsubstrings(s): return [s[i:j] for i in range(len(s)) for j in range(i+1,len(s)+1)] allsubstrings('abc') # 解答 def sum_lists(list1): list_sums = [sum(x) for x in list1] return sum(list_sums) # 模範解答 def sum_lists(list1): return sum([sum(lst) for lst in list1]) # 解答 def sum_matrix(list1, list2): return [[list1[i][j] + list2[i][j] for j in range(3)] for i in range(3)] # 条件付き内包表記 words = ['cat', 'dog', 'elephant', None, 'giraffe'] length = [len(w) for w in words if w != None] print(length) # Out: [3, 3, 8, 7] # ジェネレータ式(メモリ効率) it = (x * 3 for x in 'abc') # [] でなく () を使うとイテレータになる for x in it: print(x) '''Out: aaa bbb ccc '''