gpt4 book ai didi

python - 在python中创建一个动态数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:49 26 4
gpt4 key购买 nike

我有一个动态数组,我想在其中更新用户字符串,例如,对于 25 个字符的单个字符串,如“mannysattynastysillyfully”。会有一个 5x5 数组。

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 python2. How to take input in an array + PYTHON?3. python - how to split an input string into an array?

我仍然无法理解我应该如何处理进入动态数组的用户值

最佳答案

我认为这可能会满足您的需求:

>>> 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

注意 这只会创建完整的行,因此使用不是输入字符串长度因素的宽度会导致数据丢失。如果需要,这很容易更改,但我会将其作为练习留给读者。

如果您希望始终创建一个 2x2 的正方形,那么您可以这样做

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

编辑 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

编辑 3
如果您希望所有数据始终存在,并为空单元格使用默认值,那么这看起来像

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

调用

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

输出

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 * *

关于python - 在python中创建一个动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36636004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com