在 python 中创建字符串数组的最佳方法是什么? [重复]

问题描述 投票:0回答:11

我对 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 arrays string
11个回答
97
投票

在Python中,你通常不会做你想做的事情。但是,下面的代码可以做到这一点:

strs = ["" for x in range(size)]

31
投票

在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 的“规范”。


9
投票

简单的答案是:“你不会。”当您需要固定长度的内容时,您要么坚持旧习惯,要么为一个具有其独特约束集的非常具体的问题编写。


3
投票

在 python 中创建字符串数组的最佳和最方便的方法是借助 NumPy 库。

示例

import numpy as np
arr = np.chararray((rows, columns))

这将创建一个所有条目均为空字符串的数组。然后,您可以使用索引或切片来初始化数组。


1
投票

你想做这样的事情吗?

>>> strs = [s.strip('\(\)') for s in ['some\\', '(list)', 'of', 'strings']]
>>> strs 
['some', 'list', 'of', 'strings']

1
投票

但是使用固定大小的原因是什么? python 中没有实际需要使用固定大小的数组(列表),因此您始终可以使用追加、扩展或使用 pop 来增加其大小,或者至少可以使用切片。

x = [''  for x in xrange(10)]

1
投票
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)

0
投票

错误消息说明了一切:

strs[sum-1]
是一个元组,而不是一个字符串。如果您展示更多代码,有人可能会帮助您。没有的话我们只能猜测。


0
投票

有时我需要一个空的字符数组。不能做“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'

不好的部分是你的数组有默认值(如果你忘记更改它们)。


0
投票
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
表示单词边界


0
投票

如果您想从用户那里获取输入,这里是代码

如果每个字符串都在新行中给出:

strs = [input() for i in range(size)]

如果字符串之间用空格分隔:

strs = list(input().split())
© www.soinside.com 2019 - 2024. All rights reserved.