Bu senin ne yapabilir düşünüyorum sonra:
>>> 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']]
Ve söz konusu olması gibi yazdırmak için: bu yüzden sonuçlanacaktır girdi dizesinin uzunluğunun bir faktör değildir genişliği kullanılarak,
>>> 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
NOT Bu, ancak tam satırları yaratacak kayıp verilerde. Bu istenirse değiştirmek kolaydır, ancak bunu okuyucuya bir egzersiz olarak bırakacağım.
o zaman
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'e 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))
gibi bir şey yapabileceğini, her zaman bir kare 2x2 oluşturmak isteyen varsa çıktılı
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
verir EDIT 3 012 Tüm veriler her zaman mevcut olması ve boş hücreler için varsayılan bir değer kullanmak istiyorsanız, o
print_array("3 by X", two_dim('mannysattynastysillyfully', 3, '*'))
ÇIKIŞ ile Denilen
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
gibi görünecektir
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 * *
"dinamik dizi" ile tam olarak ne demek istiyorsunuz? – Thomas
@Thomas, dizi dizesini kullanıcı dizesine göre kendiliğinden kastediyor Örneğin, örneğin, dizge 25chr uzunsa, dizi 5x5 –
olarak boyutlandırılır. Python'da gerçekten çok boyutlu bir dizi yoktur. Bunu pandalar ve tablib de dahil olmak üzere yapabileceğiniz birkaç kütüphane var. Sadece bir liste listesi veya bunun gibi bir şey kullanabilirsiniz. –