numpy数组中的字符串切片

2024-05-14 19:43:44 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个带有numpy.str_元素的numpy.ndarray。例如,下面的arr是带有两个numpy.str_元素的numpy.ndarray,如下所示:

arr = ['12345"""ABCDEFG'  '1A2B3C"""']

尝试对每个numpy元素执行字符串切片。在

例如,我们如何切片第一个元素'12345"""ABCDEFG',以便用字符串REPL替换其最后10个字符,即

^{pr2}$

另外,是否可以执行字符串替换,例如替换特定符号后的所有字符?在


Tags: 字符串numpy元素符号切片repl字符ndarray
3条回答

np.char具有replace函数,该函数将相应的字符串方法应用于数组的每个元素:

In [598]: arr = np.array(['12345"""ABCDEFG',  '1A2B3C"""'])
In [599]: np.char.replace(arr,'"""ABCDEFG',"REPL")
Out[599]: 
array(['12345REPL', '1A2B3C"""'], 
      dtype='<U9')

在这个特定的例子中,它可以正常工作,但它并不像re.sub那么通用。同样,这些char函数只比在数组上迭代快一些。在@Divakar'slink中有一些很好的例子。在

字符串是不可变的,因此您应该创建片段并手动重新组合,或者使用正则表达式。例如,要替换数组中第一个元素arr的最后10个字符,可以执行以下操作:

import numpy as np
import re

arr = np.array(['12345"""ABCDEFG', '1A2B3C"""'])
arr[0] = re.sub(arr[0][-10:], 'REPL', arr[0])

print(arr)
#['12345REPL' '1A2B3C"""']

如果要替换特定字符后的所有字符,可以使用正则表达式或在字符串中查找该字符的索引并将其用作切片索引。在

编辑:您的评论更多的是关于正则表达式,而不是简单的Python切片,但是这是如何替换三引号后面的所有内容的方法:

^{2}$

这一行基本上是说,“找到三引号及其后的所有内容,但只替换三引号后的每个字符。”

在python中,字符串是不可变的。另外,在NumPy中,数组标量是不可变的;因此字符串是不可变的。在

为了进行切片,您需要做的是将字符串视为一个列表并访问元素。在

假设我们有一个字符串,我们想在第三个字母处切片,不包括第三个字母:

my_str = 'purple'
sliced_str = my_str[:3]

现在我们有了字符串的一部分,假设我们想用z来代替切片后的每个字母。我们必须使用新的字符串来提取我们想要的字母,并用我们想要创建的所需字符串创建一个附加字符串:

^{2}$

因为字符串类型是不可变的,所以必须存储要保留的元素,然后将存储的元素与要添加到新变量中的元素组合起来。在

相关问题 更多 >

    热门问题