これは、あなたが何をしているのかがわかると思います。
>>> 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
ようになります。
「ダイナミックアレイ」とはどういう意味ですか? – Thomas
@トーマスは、ユーザー文字列たとえば、文字列が25chrの場合、配列は5x5のサイズになります –
実際にはPythonではネイティブの多次元配列はありません。 pandasとtablibを含むこれを行うことができるライブラリがいくつかあります。あなたはリストのリストなどを使用することもできます。 –