2016-04-14 17 views
1

私はuserstringを更新したい動的配列を持っています。たとえば、 'mannysattynastysillyfully'のように、25文字の単一文字列の場合は です。 5×5アレイが存在する。Pythonで動的配列を作成する

m a n n y 
s a t t y 
n a s t y 
s i l l y 
f u l l y 

私は私がどうあるべきか理解することはまだできない 1. How to define two-dimensional array in python 2. How to take input in an array + PYTHON? 3. python - how to split an input string into an array?

アムから得たことを複数のものを試してみましたが、情報のビットとの広範な検索を経てきました

+3

「ダイナミックアレイ」とはどういう意味ですか? – Thomas

+0

@トーマスは、ユーザー文字列たとえば、文字列が25chrの場合、配列は5x5のサイズになります –

+0

実際にはPythonではネイティブの多次元配列はありません。 pandasとtablibを含むこれを行うことができるライブラリがいくつかあります。あなたはリストのリストなどを使用することもできます。 –

答えて

2

これは、あなたが何をしているのかがわかると思います。

>>> def two_dim(inval, width=5): 
...  out = [] 
...  for i in range(0, len(inval) - 1, width): 
...   out.append(list(inval[i:i + width])) 
...  return out 
... 
>>> print(two_dim('mannysattynastysillyfully')) 
[['m', 'a', 'n', 'n', 'y'], ['s', 'a', 't', 't', 'y'], ['n', 'a', 's', 't', 'y'], ['s', 'i', 'l', 'l', 'y'], ['f', 'u', 'l', 'l', 'y']] 

そして、あなたが疑問を持っているようにそれを印刷するには:そうなります入力文字列の長さの要因ではない幅を使用して、

>>> c = two_dim('mannysattynastysillyfully') 
>>> for sub in c: 
...  print " ".join(sub) 
... 
m a n n y 
s a t t y 
n a s t y 
s i l l y 
f u l l y 

がNOTEこれが唯一の完全な行を作成します。紛失したデータこれは必要に応じて変更するのは簡単ですが、私はそれを読者に練習として残します。

あなたは常に正方形の2×2を作成するために探している場合

def is_square(l): 
    return math.floor(math.sqrt(l))**2 == l 

def two_dim_square(inval): 
    if not is_square(len(inval)): 
     raise Exception("string length is not a perfect square") 
    width = math.sqrt(len(inval)) 
    # proceed like before with a derived width 

EDIT 2

def two_dim(inval, width=5): 
    out = [] 
    for i in range(0, len(inval) - 1, width): 
     out.append(list(inval[i:i + width])) 
    return out 

def print_array(label, inval, joiner=' '): 
    print label 
    for sub in inval: 
     print joiner.join(sub) 
    print 

print_array("3 by X", two_dim('mannysattynastysillyfully', 3)) 
print_array("4 by X", two_dim('mannysattynastysillyfully', 4)) 
print_array("5 by X", two_dim('mannysattynastysillyfully', 5)) 
print_array("6 by X", two_dim('mannysattynastysillyfully', 6)) 

が出力に

3 by X 
m a n 
n y s 
a t t 
y n a 
s t y 
s i l 
l y f 
u l l 

4 by X 
m a n n 
y s a t 
t y n a 
s t y s 
i l l y 
f u l l 

5 by X 
m a n n y 
s a t t y 
n a s t y 
s i l l y 
f u l l y 

6 by X 
m a n n y s 
a t t y n a 
s t y s i l 
l y f u l l 

を与えるように、あなたが何かを行うことができますEDIT 3
あなたはすべてのデータが常に存在すること、そして空のセルのデフォルト値を使用したい場合は、それが

print_array("3 by X", two_dim('mannysattynastysillyfully', 3, '*')) 

OUTPUT

3 by X 
m a n 
n y s 
a t t 
y n a 
s t y 
s i l 
l y f 
u l l 
y * * 
で呼び出され
def two_dim(inval, width=5, fill=' '): 
    out = [] 
    # This just right-pads the input string with the correct number of fill values so the N*M is complete. 
    inval = inval + (fill * (width - (len(inval) % width))) 
    for i in range(0, len(inval) - 1, width): 
     out.append(list(inval[i:i + width])) 
    return out 

ようになります。

+0

すばらしい答えです。幅がオンザフライで決定されなければならない場合に行われる –

+0

「あなたの幅がオンザフライで決定されなければならない場合」とはどういう意味ですか? – sberry

+0

配列の幅がユーザーによって決定されることを意味します –

関連する問題