だから、最初のオフ、あなたのコード内であなたのインデントを修正する必要があります。
def make_even(xss):
for i in range(len(xss)):
for j in range(len(xss)):
if xss[i][j] % 2!= 0:
xss[i][j] += 3
return xss
両方あなたのループがlen(xss)
を使用するためしかし、彼らは3つのリスト3つの要素を持つ各の配列を期待しています。あなたは、各リストは、要素の変数番号を持ちたいと思います場合は、代わりにこれを行う必要があります。
def make_even(xss):
for i in range(len(xss)):
for j in range(len(xss[i])):
if xss[i][j] % 2!= 0:
xss[i][j] += 3
return xss
返す:[[4, 2, 6], [], [4, 8]]
をしかし、私はなるだろう2つの明らかな変化があります。
は
- ifステートメントは
if xss[i][j] % 2 == 1
である必要があります。
- 1を追加することによっても数値を作ることができます(3つの仕様が必要な場合は問題ありません)。
また、これは、(任意の行は動作します)シングルラインで完全になんとかです:
# List comprehensions only
xss = [[(x + 3 if x % 2 == 1 else x) for x in row] for row in xss]
# map and lamdbas (returns lists)
xss = list(map(lambda row: list(map((lambda x: x + 3 if x % 2 == 1 else x),row)), xss))
# map and lamdbas (returns iterables)
xss = map(lambda row: map((lambda x: x + 3 if x % 2 == 1 else x),row), xss)
個人的に、私はリストの内包表記は読みするのが最も簡単だと思いますが。
私は、あなたのインデントを修正する必要があると思うpythonは、ループの入れ子を検出します。 – IQV