何も誇れぬ人生の記録

『ぼくは何も誇れないのが誇りだな』沼田真佑、影裏より

内包表記

# 解答
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
'''