我对 Python 及其库相对较新,我想知道如何创建具有预设大小的字符串数组。这在java中很容易,但我想知道如何在python中做到这一点。
目前我能想到的就是
strs = ['']*size
当我尝试对其调用字符串方法时,调试器会给出错误 X 操作在对象元组中不存在。
如果是在java中,这就是我想做的。
String[] ar = new String[size];
Arrays.fill(ar,"");
请帮忙。
错误代码
strs[sum-1] = strs[sum-1].strip('\(\)')
AttributeError: 'tuple' object has no attribute 'strip'
问题:我如何在 Python 中完成通常在 Java 中可以完成的工作,同时仍保持代码整洁。
在Python中,你通常不会做你想做的事情。但是,下面的代码可以做到这一点:
strs = ["" for x in range(size)]
在Python中,通常会使用非固定大小的列表(也就是说可以动态地向其中添加/删除项目)。如果您遵循此操作,则无需提前分配固定大小的集合并用空值填充它。相反,当您获取或创建字符串时,只需将它们添加到列表中即可。当需要删除值时,您只需从字符串中删除适当的值即可。我想你可能可以使用这种技术来实现这一点。例如(Python 2.x 语法):
>>> temp_list = []
>>> print temp_list
[]
>>>
>>> temp_list.append("one")
>>> temp_list.append("two")
>>> print temp_list
['one', 'two']
>>>
>>> temp_list.append("three")
>>> print temp_list
['one', 'two', 'three']
>>>
当然,某些情况可能需要更具体的内容。对于您的情况,一个好主意可能是使用双端队列。请查看此处的帖子:Python,强制列表为固定大小。这样,您可以创建一个具有固定大小的双端队列。如果将新值附加到末尾,则删除第一个元素(双端队列的头部)并将新项附加到双端队列。这可能适合您的需要,但我不认为这被认为是 Python 的“规范”。
简单的答案是:“你不会。”当您需要固定长度的内容时,您要么坚持旧习惯,要么为一个具有其独特约束集的非常具体的问题编写。
在 python 中创建字符串数组的最佳和最方便的方法是借助 NumPy 库。
示例:
import numpy as np
arr = np.chararray((rows, columns))
这将创建一个所有条目均为空字符串的数组。然后,您可以使用索引或切片来初始化数组。
你想做这样的事情吗?
>>> strs = [s.strip('\(\)') for s in ['some\\', '(list)', 'of', 'strings']]
>>> strs
['some', 'list', 'of', 'strings']
但是使用固定大小的原因是什么? python 中没有实际需要使用固定大小的数组(列表),因此您始终可以使用追加、扩展或使用 pop 来增加其大小,或者至少可以使用切片。
x = ['' for x in xrange(10)]
strlist =[{}]*10
strlist[0] = set()
strlist[0].add("Beef")
strlist[0].add("Fish")
strlist[1] = {"Apple", "Banana"}
strlist[1].add("Cherry")
print(strlist[0])
print(strlist[1])
print(strlist[2])
print("Array size:", len(strlist))
print(strlist)
错误消息说明了一切:
strs[sum-1]
是一个元组,而不是一个字符串。如果您展示更多代码,有人可能会帮助您。没有的话我们只能猜测。
有时我需要一个空的字符数组。不能做“np.empty(size)”,因为后面填char会报错。然后我通常会做一些相当笨拙的事情,但这仍然是一种方法:
# Suppose you want a size N char array
charlist = [' ']*N # other preset character is fine as well, like 'x'
chararray = np.array(charlist)
# Then you change the content of the array
chararray[somecondition1] = 'a'
chararray[somecondition2] = 'b'
不好的部分是你的数组有默认值(如果你忘记更改它们)。
def _remove_regex(input_text, regex_pattern):
findregs = re.finditer(regex_pattern, input_text)
for i in findregs:
input_text = re.sub(i.group().strip(), '', input_text)
return input_text
regex_pattern = r"\buntil\b|\bcan\b|\bboat\b"
_remove_regex("row and row and row your boat until you can row no more", regex_pattern)
\w
表示匹配单词字符,a|b
表示匹配a
或b
,\b
表示单词边界
如果您想从用户那里获取输入,这里是代码
如果每个字符串都在新行中给出:
strs = [input() for i in range(size)]
如果字符串之间用空格分隔:
strs = list(input().split())