私はこのデータ構造を有する:2次元配列がPythonを使って分割されているセクション番号を定義するには?
それはセクションに分割された2Dアレイです。配列の各文字については、セクションの番号を定義する必要があります。たとえば、文字a,b,c,d
はセクション1にあります。 e,f,g,h
はセクション2にあります。
マイコード。まず、この2次元配列の準備:
from itertools import cycle
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
#2d-array initialization
width, height = 3, 6
repRange = cycle(range(1, 3))
values = [0] * (width - 1)
array2d = [[next(repRange)] + values for y in range(height)]
#Filling array with letters:
m = 0
for i in range(height):
for j in range(1,width):
array2d[i][j] = letters[m]
m+=1
#Printing:
for row in array2d:
print(row)
出力:
[1, 'a', 'b']
[2, 'c', 'd']
[1, 'e', 'f']
[2, 'g', 'h']
[1, 'i', 'j']
[2, 'k', 'l']
は今、私は、各文字のセクション番号を決定し、文字自体とともに、それを保存する必要があります。それは、正しく各文字のすべてのセクション番号を定義し
('f', 2)
('b', 1)
('c', 1)
('e', 2)
('k', 3)
('g', 2)
('d', 1)
('a', 1)
('l', 3)
('h', 2)
('i', 3)
('j', 3)
:私はdefineSection
機能を使用し、辞書に値を保存します。
def defineSection(i, division, height):
if i <= division:
return 1
elif division*2 >= i > division :
return 2
elif division*3 >= i > division*2 :
return 3
dic = {}
for i in range(height):
for j in range(1,width):
section = defineSection(i+1, 2, height)
dic.update({array2d[i][j] : section})
for item in dic.items():
print(item)
出力。しかしdefineSection
方法は原始的で、行数が6 より大きい場合は動作しません私は、それが自動的にアカウントにのみ、現在の行番号を取っセクション番号を定義するようにdefineSection
メソッドを実装する方法を部門を知らないと行数合計。
質問:私は単純にそう多くif-elif
条件なしで独立した行の合計数のセクション番号を決定することができますいくつかの方法がありますか?