Python那些关于字符串的操作(结合华为机试题)

105 阅读3分钟

1 前言

python关于字符串的操作很多,而正则化直接是打开新世界的大门。同一种说法,使用不同语言进行实现,就是完全不同的效果!这里先简单介绍几种最近使用到的字符串操作!


2 字符串的处理操作

2.1分割字符串

可以采用.split(“xx”),就是以xx为分割线进行分割。 刷题中对于题目的数据输入处理,常常需要我们自己对输入数据进行处理,那么就会涉及到字符串的分割。

line=input()
words=line.split(";")

例如:当input()为题目中的输入,那么当输入为10;20时,我们需要分割开来,就可以按照上面的方式进行使用。直接采用xx.split(“yy”)。这里的分割可以是字符、符号、空格都行。

在机试题中,使用python3来解答字符串的题,在题目解答开始就出现了分割:

for line in sys.stdin:
    a = line.split()

sys.stdin 来逐行读取输入,并将每一行通过空格分割成多个部分,然后将分割后的结果存储在变量 a 中。

2.2拼接字符串

使用+或者.join()
" ".join(x):相当于空格加字符x;当需要不断将字符拼接成字符串时,可以利用for循环结合.join() 来完成操作。 例如:HJ18——识别有效的IP地址和掩码并进行分类统计,这里就使用到了拼接。

`x = [str(x1) ``for` `x1 in x]`
`print(``" "``.join(x))`

我们将字符形式的数据直接拼接成一个数据。

  • 查找字符串:使用find()或者index()

2.3正则表达式

使用import re

  • re.compile——制定规则(这里是指,我们可以利用正则化表达来进行数据区分)

     $为结尾
     .表示匹配任何字符
     \d表示匹配任何数字字符
     []来定义一个字符集合
     *表示匹配前一个字符的0次或多次重复
     +表示匹配前一个字符的1次或多次重复
     ?表示匹配前一个字符的0次或1次重复
     \来转义特殊字符
    

例如:HJ17——坐标移动

其中就有提到:合法坐标为A(或者D或者W或者S) + 数字(两位以内)

Python写法:就是利用正则化表达式进行书写过滤。

rule=re.compile(r'^[ASWD]\d{1,2}$')

[ASWD]就是定义一个字符集合 \d{1,2}就是匹配两位的数据字符

通过这样的形式,可以快速解决条件限制问题,简化代码。

C++写法:

if((arr[i].size() == 3) && (arr[i][1] >='0') && (arr[i][1] <= '9') && (arr[i][2] >='0') && (arr[i][2] <= '9'))
if((arr[i].size() == 2) && (arr[i][1] <= '9') && (arr[i][1] >= '0'))

C++的写法就相对复杂,通过二维数组需要使用条件语句进行判断。

  • re.search——搜索

例如:HJ30——字符串合并:对排序后的字符串中的'0''9'、'A''F'和'a'~'f'字符,需要进行转换操作。

 if re.search(r``'[0-9A-Fa-f]'``,x):

2.4enumerate

例如:HJ29——字符串加解密 找字符串中对应的字符的索引。一种比较好的办法就是直接列出大小写字符串,然后索引直接查找。这里就是使用到enumerate 例如:

L1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for a in line:
    for index,char in enumerate(L1):
        if char==a:
            result+=L2[index]		

这里就是在L1字符串中直接进行遍历,然后可判断char是否为我们想要的字符,然后进行索引处理。

2.5字符串中的大小写转化

  • upper() 用于将字符串中的所有字符转换为大写
  • lower()是大写转小写 经常有需要大小写转化,在c++中可能需要使用ASCii码或者其他方式进行转化,而python直接使用函数就处理掉了。 例如:HJ30——字符串合并就有转化操作,需要使用upper()

2.6 对齐加数

  • rjust() 是字符串(str)对象的一个方法,用于将字符串右对齐并返回结果。
text = "x"print(text.rjust(2))  # 输出: ' x'

上面示例就是将x向右对齐,根据设置的长度,补齐剩下内容。

例如:HJ30——字符串合并就有需要将数据转化为二进制,并以四位数的形式进行翻转取值。这里需要将int变成二进制,然后补零操作,就使用到了rjust(),将二进制后的数据补零。


总结

正则化操作可以继续深入研究,python的正则化使用极大提升了效率!