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

时间:2011-06-16 18:38:53

标签: python arrays string

我对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中做我通常做的事情。

11 个答案:

答案 0 :(得分:60)

在python中,你通常不会做你想要做的事情。但是,以下代码将执行此操作:

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

答案 1 :(得分:20)

在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, forcing a list to a fixed size。有了这个,你可以创建一个具有固定大小的双端队列。如果将新值附加到末尾,则删除第一个元素(双端队列的头部),并将新项目附加到双端队列。这可能适用于你需要的东西,但我不认为这被认为是Python的“标准”。

答案 2 :(得分:7)

简单的答案是,“你没有。”在你需要一些固定长度的东西时,你要么坚持旧习惯,要么用一套独特的约束来写一个非常具体的问题。

答案 3 :(得分:1)

但是使用固定尺寸的原因是什么? python中没有实际需要使用固定大小的数组(列表),所以你总是能够使用pop追加,扩展或减少来增加它的大小,或者至少你可以使用切片。

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

答案 4 :(得分:1)

你想做这样的事吗?

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

答案 5 :(得分:0)

错误消息说明了一切:strs[sum-1]是元组,而不是字符串。如果您显示更多代码,某人可能会帮助您。没有它我们只能猜测。

答案 6 :(得分:0)

有时我需要一个空的char数组。您不能执行“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'

这很糟糕的部分是你的数组有默认值(如果你忘记更改它们)。

答案 7 :(得分:0)

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

示例

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

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

答案 8 :(得分: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表示匹配ab\b表示字边界

答案 9 :(得分:0)

如果要从用户那里获取输入,则代码为

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

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

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

strs = list(input().split())

答案 10 :(得分:0)

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)