如何将多个小字符串拼接成一个大字符串,python高级编程技巧

方法一

迭代列表,连续使用‘+’操作依次拼接每一个字符串,其代码如下:

# -*- coding: utf-8 -*-pl = ["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"]s = ""for p in pl: s += pprint s

其输出结果为:

<0112><32><1024x768><60><1><100.0><500.0>

其实我们采用”+”进行字符串拼接,实际上是运算符重载,在字符串拼接时调用了str.__add__()。若有兴趣可查阅Python官方文档。

二. 如何对字符串进行左、右、居中对齐?

实际案例:

  1. 某个字典存储一系列属性值,
    {
    “DistCull”:500.0,
    “SmallCull”:0.04,
    “farclip”:366,
    “lodDist”:100.0,
    “trilinear”:40
    }
    在程序中,我们想以以下工整的格式将其内容输出,如何处理?
    输出:
    DistCull : 500.0
    SmallCull : 0.04
    farclip : 366
    lodDist : 100.0
    trilinear : 40
实际案例

在设计某网络程序时,我们自定义了一个基于UDP的网络协议,按照固定次序向服务器传递一系列参数:
hwDetect: “<0112>” gxDepthBits “<32>” gxResolution:
“<1024×768>” gxRefresh: ”<60>” fullAlpha: “<1>”
lodDist: “<100.0>” DistCull:
“<500.0>”在程序中我们将各个参数按次序收集到列表中:[“<0112>”,
“<32>”, “<1024×768>”, “<60>”, “<1>”,
“<100.0>”,
“<500.0>”]最终我们要把各个参数拼接成一个数据报进行发送:”<0112><32><1024×768><60><1><100.0><500.0>>”

解决方案:

  • 方法一:迭代列表,连续使用‘+’操作依次拼接每一个字符串
  • 方法二:使用str.join(),更加快速的拼接列表中所有字符串

三. 如何去掉字符串中不需要的字符?

实际案例:

  1. 过滤掉用户输入中前后多余的空白字符:

    nick2008@gmail.com
  2. 过滤某windows下编辑文本中的‘r’:
    ‘hello worldrn’
  3. 去掉文本中的unicode组合符号(音调):
    u‘ní hǎo, chī fàn’
方法二

使用str.join(),更加快速的拼接列表中所有字符串,其代码如下:

# -*- coding: utf-8 -*-pl = ["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"]s = "".joinprint s

其输出结果如下:

<0112><32><1024x768><60><1><100.0><500.0>

对于方法一,若我们将方法一的中间结果打印输出,我们就会发现方法一存在很严重的问题,每一次字符串拼接操作Python的解释器都要进行内存的申请与回收,一旦所需拼接的字符串过多,其运行效率会大打折扣。

因此,我们对于处理大量字符串拼接操作推荐使用str.join()。为此,在这里再介绍一个关于str.join()的小技巧,其代码如下:

l = ["abc", 123, 'xyz']# 通过生成器解析将每个元素转为str类型s = "".join for x in l)print s

其运行结果如下:

abc123xyz

当我们处理的列表中既有字符串,又有非字符串的数据时,我们可以使用生成器表达式或列表解析将列表中的每个元素转为str类型。(注:具体关于列表解析与生成器表达式的效率问题,可参考杰瑞的专栏。)

代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/14 21:24
# @File     : 如何去掉字符串中不需要的字符.py

#方法 1 :str.strip()

s = '   abc   123  '
print(s.strip()) #去掉字符串两边(开头与结尾)的空白字符
print(s.lstrip()) #去掉字符串左边的空白字符
print(s.rstrip()) #去掉字符串右边的空白字符

s = '---abc++++'
print(s.strip('-+')) #去掉字符串两边与传入的参数匹配的字符

#####################################

#方法 2 :切片+拼接

s = 'abc:123'
s1 = s[:3] + s[4:] #切片操作,左闭右开
print(s1)

#方法 3 :replace() 或者 re.sub()

s = 'tabct123txyz' #字符串中带有3个空白符 t
print(s.replace('t',''))

import re
s = 'tabct123txyzropqr'
s1 = re.sub('[tr]', '', s)#替换任意多的字符
print(s1)

#方法 4 :translate()

#(1)
s = 'abc1230323xyz'
# str.maketrans('abcxyz','xyzabc') #映射表关系,进行加密:abc--xyz,  xyz--abc
s1 = s.translate(str.maketrans('abcxyz','xyzabc'))
print(s1) #xyz1230323abc

#(2):与Python2的差异是:Python3中是对'bytes'进行处理,而不是‘string'
s2 = b'abcrefgn2343t'
#translate()有两个参数:
# 第一个为None代表不做任何映射关系,第二个参数表示要删除的字符
print(s2.translate(None ,b'rtn') )

# 转换为大写,并删除字母o
bytes_tabtrans = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
print(b'runoob'.translate(bytes_tabtrans, b'o'))

##############################

#去除Unicode字符中的音调
import sys
import unicodedata
s = "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng"
remap = {
    # ord返回ascii值
    ord('t'): '',
    ord('f'): '',
    ord('r'): None
    }
# 去除t, f, r

a = s.translate(remap)
'''
  通过使用dict.fromkeys() 方法构造一个字典,每个Unicode 和音符作为键,对于的值全部为None
  然后使用unicodedata.normalize() 将原始输入标准化为分解形式字符
  sys.maxunicode : 给出最大Unicode代码点的值的整数,即1114111(十六进制的0x10FFFF)。
  unicodedata.combining:将分配给字符chr的规范组合类作为整数返回。 如果未定义组合类,则返回0。
'''
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建议拆分开来理解
b = unicodedata.normalize('NFD', a)
'''
   调用translate 函数删除所有重音符
'''
print(b.translate(cmb_chrs))

图片 1

要努力要奋斗

解决方案:

方法1.使用字符串的 str.ljust(), str.rjust(), str.center()
方法进行左右居中对齐。
方法2.使用 format()方法,传递类似‘<20’, ‘>20’,
‘^20’
参数完成同样任务。

代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/13 16:19
# @File     : 如何将多个小字符串拼接成一个大的字符串.py

#方法 1 :使用 '+' 号
s1 = 'abcdefg'
s2 = '12345'
print(s1 + s2)# 本质上是运算符重载:str.__add__(s1, s2)
print(s1 > s2) #True :str.__gt__(s1, s2)

#################################################

pl = ["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"]

# 方法 1 (不推荐,存在巨大的浪费)
s = '' #空字符串进行拼接
for p in pl:
    s += p
print(s)

#方法 2(推荐使用,列表很长的情况下):使用str.join()方法,更加快速的拼接列表中的所有字符串
print(''.join(pl)) #一次性的拼接,不浪费

#当列表中的数据类型不同时 如何进行字符串的拼接?
s = ['abc', 123, 45, 'xyz']
print(''.join([str(x) for x in s])) #列表解析,不推荐,生成新的列表,在文件很大的情况下不适用
#推荐使用生成器表达式,[] 变为 ()
print(''.join((str(x) for x in s))) #(str(x) for x in s)是generator object(生成器对象)

发表评论

电子邮件地址不会被公开。 必填项已用*标注